【发布时间】:2018-03-16 22:39:48
【问题描述】:
如何捕获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,我不想在每个switch-case 中处理try-catch。
问候,
【问题讨论】:
标签: node.js async-await try-catch