首頁 > web前端 > js教程 > 如何使用 Bluebird Promise 處理非同步回呼中的異常?

如何使用 Bluebird Promise 處理非同步回呼中的異常?

Barbara Streisand
發布: 2024-11-02 02:24:02
原創
708 人瀏覽過

How to Handle Exceptions in Asynchronous Callbacks with Bluebird Promises?

使用Bluebird Promises 進行非同步異常處理

考慮以下場景:您需要在受控環境中處理異常而不導致應用程式崩潰。讓我們使用Bluebird Promise 來檢查這個具體範例:

<code class="javascript">var Promise = require('bluebird');

function getPromise(){
    return new Promise(function(done, reject){
        setTimeout(function(){
                throw new Error("AJAJAJA");
        }, 500);
    });
}</code>
登入後複製

當setTimeout 回呼中引發異常時,Node.js 事件循環會捕獲該異常並記錄到控制台,從而導致程式崩潰:

$ node bluebird.js

c:\blp\rplus\bbcode\scratchboard\bluebird.js:6
                throw new Error("AJAJAJA");
                      ^
Error: AJAJAJA
    at null._onTimeout (c:\blp\rplus\bbcode\scratchboard\bluebird.js:6:23)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
登入後複製

Promise 但是可以捕捉從建構子回調中拋出的異常。要處理非同步回呼中引發的異常,您應該使用在錯誤時拒絕的 Promise 來包裝回調。

<code class="javascript">function getPromise(){
   return new Promise(function(done, reject){
      setTimeout(function(){
           done();
      }, 500);
   }).then(function() {
       console.log("hihihihi");
       throw new Error("Oh no!");
   });
}</code>
登入後複製

在此修改後的範例中,異常由周圍的 Promise 鏈捕獲:

$ node bluebird.js
Error [Error: Oh no!]
登入後複製

請記住,Promise 不會捕獲非同步回調中的異常。在這種情況下,請務必拒絕周圍的承諾,並在必要時使用 try-catch 區塊。這種方法可確保正常處理異常,而不會導致應用程式崩潰。

以上是如何使用 Bluebird Promise 處理非同步回呼中的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板