首頁 > web前端 > js教程 > 主體

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

DDD
發布: 2024-10-26 16:39:30
原創
946 人瀏覽過

How do you handle unhandled exceptions in asynchronous callbacks with Bluebird promises?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!