已更新,我現在已經嘗試解釋我所看到的行為,但從可靠的來源獲得有關該行為的答案仍然很棒unhandledRejection。我還在Reddit 上發起了一個討論帖。為什么我會unhandledRejection在以下代碼中收到一個事件(對于“error f1”)?這是出乎意料的,因為我finally在main.我在 Node (v14.13.1) 和 Chrome (v86.0.4240.75) 中看到了相同的行為:window.addEventListener("unhandledrejection", event => { console.warn(`unhandledRejection: ${event.reason.message}`);});function delay(ms) { return new Promise(r => setTimeout(r, ms));}async function f1() { await delay(100); throw new Error("error f1");}async function f2() { await delay(200); throw new Error("error f2");}async function main() { // start all at once const [p1, p2] = [f1(), f2()]; try { await p2; // do something after p2 is settled await p1; // do something after p1 is settled } finally { await p1.catch(e => console.warn(`caught on p1: ${e.message}`)); await p2.catch(e => console.warn(`caught on p2: ${e.message}`)); }}main().catch(e => console.warn(`caught on main: ${e.message}`));
promise 的意外 unhandledRejection 事件確實得到處理
白豬掌柜的
2023-05-11 14:36:32