我有两个promise,一开始没有catch块,后来我用catch
块对它们进行等待。第二个承诺reject
s在第一个承诺resolve
s之前。因此,当我还在第一个承诺上await
时,第二个保证是reject
ed,由于我还没有附加catch
,它会用UnhandledPromiseRejection
破坏服务器。
有没有一种方法可以让p2的reject
传播到await p2
,就像在p2resolve
s的情况下一样?
附言:我不能在开始的时候就把接球附加上去。
添加以下代码以供参考。在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结果。