我一直在试图从概念上理解以下代码为何无法捕获throw。如果async从new Promise(async (resolve, ...零件中删除关键字,则它可以正常工作,因此它与Promise执行器是异步函数这一事实有关。
throw
async
new Promise(async (resolve, ...
(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>>"); // ... }); }
如果代替throw我们使用reject,则上面的代码可以正常工作。我想 _从根本_上理解为什么throw在这里不起作用。谢谢!
reject
[1:通过调用resolve而reject不是使用returnand throw语句]
resolve
return
通过“异步”,它们不是指async功能,所以我认为它们的解释在这里不适用
他们也可以。一个简单的例子就 不能 工作
new Promise(async function() { await delay(…); throw new Error(…); })
相当于
new Promise(function() { return delay(…).then(function() { throw new Error(…); }); })
现在很清楚,该代码throw位于异步回调中。