NodeJS:UnhandledPromiseRejection当promise在等待之前被拒绝时



我有两个promise,一开始没有catch块,后来我用catch块对它们进行等待。第二个承诺rejects在第一个承诺resolves之前。因此,当我还在第一个承诺上await时,第二个保证是rejected,由于我还没有附加catch,它会用UnhandledPromiseRejection破坏服务器。

有没有一种方法可以让p2的reject传播到await p2,就像在p2resolves的情况下一样?

附言:我不能在开始的时候就把接球附加上去。

添加以下代码以供参考。在stackoverflow中,由于某些原因,它可以正常工作,但当从本地运行时,服务器会崩溃。

async function main() {
console.log("starting");
let p1 = new Promise((resolve, reject) => {
console.log('p1 sleeping');
setTimeout(function() {
console.log('p1 awake');
resolve('p1 resolved');
}, 5000);
});
let p2 = new Promise((resolve, reject) => {
console.log('p2 sleeping');
setTimeout(function() {
console.log('p2 awake');
reject('p2 rejected');  //IMPORTANT
}, 1000);
});
//Below line takes 5 seconds to execute.
//But p2 throws error after 1 second because no .catch() is attached to it yet.
let out1 = await p1.catch(e => {
console.log('p1 errored', e)
});
console.log('p1 output', out1);
let out2 = await p2.catch(e => {
console.log('p2 errored', e)
});
console.log('p2 output', out2);
}
main().then(() => {
console.log('stopped')
});

如果您在Stack Overflow控制台中运行代码,它仍然会抛出UnhandledPromiseRejection,因为您没有处理Promise拒绝(您可以在浏览器DevTools上看到错误(。

您应该尝试使用Promise.all,或者使用then()catch()处理每个Promise结果。

相关内容

  • 没有找到相关文章

最新更新