處理非同步場景時,防止節點因惡意回調而崩潰至關重要。在本文中,我們將探討使用 Bluebird Promise 來應對這項挑戰的最佳實踐。
考慮以下場景:
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { throw new Error("AJAJAJA"); }, 500); }); } ...
透過在 setTimeout 內拋出異常,我們繞過了 Bluebird 的錯誤處理機制並使程式崩潰。但是,如果異常發生在 setTimeout 之前,Bluebird 會成功捕捉它:
function getPromise() { return new Promise((done, reject) => { throw new Error("Oh no!"); setTimeout(() => { console.log("hihihihi"); }, 500); }); } ...
這表明 Promises 不會攔截來自非同步回調的異常。相反,它們僅在建構函數回調或 then/catch 回調中處理錯誤。
為了避免節點崩潰,切勿在自訂非同步回呼中拋出錯誤。相反,拒絕周圍的承諾。考慮以下修改:
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { done(); }, 500); }).then(() => { console.log("hihihihi"); throw new Error("Oh no!"); }); } ...
透過使用 then 包裝非同步操作,我們現在可以在 Bluebird 回調中處理錯誤。
以上是Bluebird Promises 如何解決 Node.js 中非同步異常處理的挑戰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!