使用 Bluebird Promises 進行非同步異常處理
問:如何使用 Bluebird Promises 處理非同步回調中未處理的異常?
與域不同,Bluebird Promise 本質上不會捕捉非同步回呼拋出的異常。
A:使用Promise 建構子或then() 閉包來處理異常
要捕捉非同步回呼中的異常,請將回呼包裝在Promise 構造函數或then() 閉包中:
<code class="javascript">function getPromise(){ return new Promise(function(done, reject){ setTimeout(function(){ throw new Error("AJAJAJA"); }, 500); }).then(function() { console.log("hihihihi"); throw new Error("Oh no!"); }); }</code>
避免拋出自訂非同步回呼
從不直接在自訂非同步回呼中拋出異常(在Promise回調之外)。相反,拒絕周圍的Promise:
<code class="javascript">function getPromise(){ return new Promise(function(done, reject){ setTimeout(done, 500); }).then(function() { console.log("hihihihi"); reject(new Error("Oh no!")); }); }</code>
範例
使用Promise 建構子:
<code class="javascript">var p = getPromise(); p.then(function(){ console.log("Yay"); }).error(function(e){ console.log("Rejected",e); }).catch(Error, function(e){ console.log("Error",e); }).catch(function(e){ console.log("Unknown", e); });</code>
輸出:
輸出:Error [Error: Oh no!]輸出:輸出:此方法可確保捕獲並適當處理異常,從而防止應用程式崩潰。
以上是如何使用 Bluebird Promise 處理非同步回呼中未處理的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!