如何捕获async
函数内引发的错误。如下面的例子所示:
I)工作示例(错误捕获)
(async () => {
try {
// do some await functions
throw new Error("error1")
}
catch(e) {
console.log(e)
}
})()
控制台
Error: error1
at __dirname (/home/test.js:25:11)
at Object.<anonymous> (/home/quan/nodejs/IoT/test.js:30:3)
at Module._compile (module.js:624:30)
at Object.Module._extensions..js (module.js:635:10)
at Module.load (module.js:545:32)
at tryModuleLoad (module.js:508:12)
at Function.Module._load (module.js:500:3)
at Function.Module.runMain (module.js:665:10)
at startup (bootstrap_node.js:201:16)
at bootstrap_node.js:626:3
II)但是,如果我将try-catch
放在async
之外,则异常将无法捕捉,如下所示:
try {
(async () => {
throw new Error("error1")
})()
}
catch(e) {
console.log(e)
}
控制台:
(node:3494) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: error1
(node:3494) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
有没有办法捕捉async
引发的错误,如II中所示?
我必须要求这样做以简化我的代码,其中包含许多switch-case
,我不想在每个try-catch
中处理switch-case
。
此致
答案 0 :(得分:0)
您可以使用promises来解决此问题,在promise链末尾添加catch将有助于捕获异步错误。
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
if(x === 'Error'){
throw Error('My error')
}
setTimeout(() => {
resolve(x);
}, 2000);
}).catch(function (e){
console.log('error-------------------', e)
});
}
async function add1(x) {
const a = await resolveAfter2Seconds('success');
const b = await resolveAfter2Seconds('Error');
return x + a + b;
}
add1();