在等待Promise中引发的错误未在catch块中捕获



我在try/catch块中有两个promise,第三个函数随后使用等待的响应。

当我在lastFunction的参数内awaitres1和res2时,抛出的错误不会被catch块捕获。

当我通过const res2 = await promise2()正常等待它们时,错误被捕获在catch块中。

为什么会发生这种情况?

const handler = async () => {
const results = await Promise.all(
[1].map(async id => {
try {
const res1 = promise1()        
const res2 = promise2() 
const finalResponse = await lastFunction(await res1, await res2)
} catch (err) {
console.log('Catching error')
console.log(err)
}
})
)
}
const promise1 = () => {
return new Promise((res, rej) => {
setTimeout(() => res(1), 1000)
})
}
const promise2 = () => {
return new Promise((res, rej) => {
throw new Error('second one broke')
})
}
const lastFunction = (prom1, prom2) => {
return new Promise((res, rej) => {
res('done')
})
}
handler();

CodePen:https://codepen.io/OliverNural/pen/oNbrMWw(开放式控制台(

promise2正在抛出错误,而不是拒绝承诺。await在哪里并不重要,它仍然不会捕捉到错误,因为错误源于promise。如果您将promise2更改为正确地拒绝承诺(rej("second one broke")而不是throw new Error("second one broke")(,那么您会注意到catch实际上是有效的。

最新更新