我一直在试图从概念上理解以下代码为何无法捕获throw。如果async从new Promise(async (resolve, ...零件中删除关键字,则它可以正常工作,因此它与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函数,因此,我认为它们的解释在这里不适用(如果这样做的话,我不知道怎么做。
如果代替throw我们使用reject,上述代码可以正常工作。我想从根本上理解为什么throw在这里不起作用。谢谢!
青春有我
人到中年有点甜
相关分类