我一直试图理解为什么以下代码无法捕获throw
。如果从new Promise(async (resolve, ...
部分中移除async
关键字,则工作正常,因此这与Promise执行程序是异步函数有关。
(async function() {
try {
await fn();
} catch(e) {
console.log("CAUGHT fn error -->",e)
}
})();
function fn() {
return new Promise(async (resolve, reject) => {
// ...
throw new Error("<<fn error>>");
// ...
});
}
这里,这里和这里的回答都重申了“如果你在任何其他异步回调中,则必须使用reject
”,但是他们所说的“异步”并不是指async
函数,因此我认为他们的解释不适用于这里(如果适用,我也不明白为什么)。
如果我们使用reject
而不是throw
,上面的代码可以正常工作。我想从根本上理解为什么throw
在这里无法工作。谢谢!
thing
是一个库,我不能控制/没有创建它) - user993683fn
函数变成async
,以便可以await
新构造的Promise,然后进行其他操作。执行程序不应该是async
的,且只需要做一件事:等待事件发生并调用resolve
/reject
。你可能需要提出一个带有完整代码的新问题,这样我才能提供适当的答案。 - Bergi