Node.js 使用promise更正嵌套异步函数的错误处理

Node.js 使用promise更正嵌套异步函数的错误处理,node.js,asynchronous,async-await,promise,Node.js,Asynchronous,Async Await,Promise,让我们以异步函数为例,asyncFunction,它接受一个布尔参数res。如果res为true,则承诺将以字符串“success”解析。如果res为false,则承诺将被拒绝,并返回一个包含字符串“success”的错误对象 当使用try-catch块时,我正在从函数innerFunction调用asyncFunction。到目前为止还不错 const innerFunction = async () => { try { return await asyncFunction

让我们以异步函数为例,
asyncFunction
,它接受一个布尔参数
res
。如果
res
为true,则承诺将以字符串“success”解析。如果
res
为false,则承诺将被拒绝,并返回一个包含字符串“success”的错误对象

当使用try-catch块时,我正在从函数
innerFunction
调用
asyncFunction
。到目前为止还不错

const innerFunction = async () => {
  try {
    return await asyncFunction(false); //Will reject
  } catch (error) {
    console.log("caught error inside innerFunction");
    return error;
  }
};
outerFunction
中,我正在执行

const outerFunction = async () => {
  try {
    const result = await innerFunction();
    console.log(result);
  } catch (error) {
    console.log("caught error inside outerFunction");
    console.log(error);
  }
};
最后,我运行外部函数

outerFunction();
我希望两个catch块都能捕捉到错误,但我错了。 我想你不可能两次捕捉到相同的异常?我不确定,但我的猜测是,错误对象在幕后被标记为“已处理”错误,因此在
outerFunction
中不会被识别为错误。(我想了解一下这方面的情况!)

我的解决方案是在innerFunction中抛出一个新错误:

const innerFunction = async () => {
  try {
    return await asyncFunction(false); //Will reject
  } catch (error) {
    console.log("caught error inside innerFunction");
    throw new Error(error);
  }
};
很抱歉这么长,但最后,我的问题是:对于必须处理
outerFunction
中的错误的情况,这是一种“正确”的处理方式吗?有没有更好的方法


谢谢大家!

不,您不能捕获同一错误两次。中继错误的方法将是错误的。相反,我要做的是转发输出并在外部函数中处理它们

outerFunction();
const innerFunction=async()=>asyncFunction(false);//{
试一试{
const result=等待内部函数()//