Bluebird Promise による非同期例外処理
Q: Bluebird Promise を使用した非同期コールバックで未処理の例外を処理するにはどうすればよいですか?
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>
カスタム非同期コールバックのスローを避ける
Neverカスタム非同期コールバック (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 中国語 Web サイトの他の関連記事を参照してください。