ホームページ  >  記事  >  ウェブフロントエンド  >  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 は非同期コールバックからの例外をキャッチしないことに注意してください。このような場合は常に周囲の Promise を拒否し、必要に応じて try-catch ブロックを使用してください。このアプローチにより、アプリケーションをクラッシュさせることなく例外が適切に処理されます。

以上がBluebird Promise で非同期コールバックの例外を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。