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

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

Barbara Streisand
Barbara Streisand原創
2024-11-02 02:24:02619瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn