下面是一些代码:
import 'babel-polyfill'
async function helloWorld () {
throw new Error ('hi')
}
helloWorld()
我还深入尝试了以下方法:
import 'babel-polyfill'
async function helloWorld () {
throw new Error ('hi')
}
async function main () {
try {
await helloWorld()
} catch (e) {
throw e
}
}
main()
以及:
import 'babel-polyfill'
async function helloWorld () {
throw new Error ('hi')
}
try {
helloWorld()
} catch (e) {
throw e
}
这是可行的:
import 'babel-polyfill'
async function helloWorld () {
throw new Error('xxx')
}
helloWorld()
.catch(console.log.bind(console))
3条答案
按热度按时间2ul0zpep1#
所以这有点棘手,但你没有捕捉到错误的原因是,在顶层,整个脚本可以被认为是一个 synchronous 函数,任何你想异步捕捉的东西都需要 Package 在
async
函数中,或者使用Promises。例如,它会吸收错误:
因为它和这个是一样的:
在顶层,您应该始终添加一个普通的Promise样式catch(),以确保错误得到处理:
在Node中,process上还有一个全局
unhandledRejection
事件,您可以使用它来捕获所有Promise错误。xe55xuns2#
async
is meant to be used with Promises。如果你拒绝了这个承诺,那么你可以catch
这个错误,如果你解决了这个承诺,它就变成了这个函数的返回值。ct2axkht3#
要从异步函数捕获错误,可以等待错误:
或者,您可以等待错误消息: