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=等待内部函数()//