非同期シナリオを処理する場合、不正なコールバックによるノードのクラッシュを防ぐことが重要です。この記事では、Bluebird Promise を使用してこの課題に対処するためのベスト プラクティスを検討します。
次のシナリオを考えてみましょう:
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { throw new Error("AJAJAJA"); }, 500); }); } ...
setTimeout 内で例外をスローすることで、Bluebird のエラー処理メカニズムをバイパスし、プログラムをクラッシュさせます。ただし、setTimeout より前に例外が発生した場合、Bluebird はそれを正常にキャプチャします。
function getPromise() { return new Promise((done, reject) => { throw new Error("Oh no!"); setTimeout(() => { console.log("hihihihi"); }, 500); }); } ...
これは、Promise が非同期コールバックからの例外をインターセプトしないことを示しています。代わりに、コンストラクター コールバックまたは then/catch コールバック内でのみエラーを処理します。
ノードのクラッシュを避けるために、カスタム非同期コールバックでエラーをスローしないでください。代わりに、周囲の約束を拒否してください。次の変更を検討してください。
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { done(); }, 500); }).then(() => { console.log("hihihihi"); throw new Error("Oh no!"); }); } ...
then を使用して非同期操作をラップすることで、Bluebird コールバック内でエラーを処理できるようになります。
以上がBluebird Promise は Node.js の非同期例外処理の課題をどのように解決できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。