ホームページ > ウェブフロントエンド > jsチュートリアル > Bluebird Promise は Node.js の非同期例外処理の課題をどのように解決できるでしょうか?

Bluebird Promise は Node.js の非同期例外処理の課題をどのように解決できるでしょうか?

Susan Sarandon
リリース: 2024-10-26 00:57:27
オリジナル
705 人が閲覧しました

How Can Bluebird Promises Solve the Challenge of Asynchronous Exception Handling in Node.js?

Bluebird による非同期例外処理の約束: 謎の解明

非同期シナリオを処理する場合、不正なコールバックによるノードのクラッシュを防ぐことが重要です。この記事では、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート