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

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

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

How to Handle Exceptions in Asynchronous Callbacks with Bluebird Promises?

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

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

1

2

3

4

5

6

7

8

9

<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 事件循環會捕獲該異常並記錄到控制台,從而導致程式崩潰:

1

2

3

4

5

6

7

8

$ 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 來包裝回調。

1

2

3

4

5

6

7

8

9

10

<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 鏈捕獲:

1

2

$ node bluebird.js

Error [Error: Oh no!]

登入後複製

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

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

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