以下是一些代码:
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))
答案 0 :(得分:3)
所以它有点棘手,但是你没有发现错误的原因是因为,在顶层,整个脚本可以被认为是同步函数。您想要异步捕获的任何内容都需要包含在async
函数中或使用Promises。
例如,这会吞下错误:
async function doIt() {
throw new Error('fail');
}
doIt();
因为它与此相同:
function doIt() {
return Promise.resolve().then(function () {
throw new Error('fail');
});
}
doIt();
在顶层,你应该总是添加一个普通的Promise风格的catch()来确保你的错误得到处理:
async function doIt() {
throw new Error('fail');
}
doIt().catch(console.error.bind(console));
在Node中,process上还有一个全局unhandledRejection
事件可用于捕获所有Promise错误。
答案 1 :(得分:0)
async
is meant to be used with Promises。如果您拒绝承诺,那么您可以catch
错误,如果您解决了承诺,它将成为函数的返回值。
async function helloWorld () {
return new Promise(function(resolve, reject){
reject('error')
});
}
try {
await helloWorld();
} catch (e) {
console.log('Error occurred', e);
}