是否可以捕获来自非等待异步调用的错误,将其发送到原始封装 try/catch,或引发未捕获的异常?
这是我的意思的一个例子:
async function fn1() {
console.log('executing fn1');
}
async function fn2() {
console.log('executing fn2');
throw new Error('from fn2');
}
async function test() {
try {
await fn1();
fn2();
}
catch(e) {
console.log('caught error inside test:', e);
}
}
test();
在这种情况下,抛出的错误fn2
会被无声无息地吞噬,并且绝对不会被原来的try/catch
. 我相信这是预期的行为,因为fn2
很可能会被推到事件循环以在将来的某个时间完成,并且test
不在乎它何时完成(这是有意的)。
有没有什么办法可以确保错误不会被这样的结构意外吞下,除了将try/catch
内部放入fn2
并执行诸如发出错误之类的操作吗?我什至会在不知道如何捕获它的情况下解决一个未捕获的错误,我认为——我不希望抛出的错误是我正在编写的典型程序流程,但是吞下错误会使调试相对烦人。
旁注,我正在使用 Babel 使用 babel-runtime 转换转换代码,并使用 node.js 执行它。