使用 Bluebird Promises 處理非同步異常
使用非同步程式時,異常處理可能很難管理。 Promises 是 Bluebird.js 的一項關鍵功能,它提供了一種處理非同步異常的結構化方法。
挑戰
在您的程式碼範例中,setTimeout 用於非承諾回呼。當此回調中拋出錯誤時,Bluebird 的 catch 不會被觸發,導致程式崩潰。
Bluebird 的 Promise 結構
Promises 攔截回呼中拋出的異常函數(then/catch/Promise 構造函數)。要處理非同步回調的異常,將它們包裝在 Promise 中至關重要。
優雅的異常處理
在您的場景中,您可以將 setTimeout 回調包含在 Promise 中。然後 catch 區塊將捕獲錯誤:
<code class="javascript">function getPromise() { return new Promise(function(resolve, reject) { setTimeout(resolve, 500); }).then(function() { console.log("hihihihi"); throw new Error("Oh no!"); }); }</code>
拒絕是關鍵
永遠不要在非 Promise 回調中直接拋出錯誤。相反,拒絕周圍的承諾。如有必要,請使用 try-catch 來確保正確處理。
<code class="javascript">function getPromise() { return new Promise(function(resolve, reject) { try { setTimeout(resolve, 500); } catch (err) { reject(err); } }); }</code>
透過遵守這些原則,您可以確保在 Node.js 和瀏覽器中進行優雅的異常處理,即使對於流氓非同步回呼也是如此。
以上是如何使用 Bluebird Promise 處理非同步異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!