ホームページ > ウェブフロントエンド > jsチュートリアル > 連鎖的な約束が拒否を無視することがあるのはなぜですか?

連鎖的な約束が拒否を無視することがあるのはなぜですか?

Barbara Streisand
リリース: 2024-12-12 15:56:10
オリジナル
445 人が閲覧しました

Why Do Chained Promises Sometimes Ignore Rejections?

連鎖された Promise が拒否を伝えない

連鎖された Promise は、前の Promise への意図的な依存関係にもかかわらず、エラーを伝播できない可能性があります。この動作は不可解かもしれませんが、Promise/A の性質に根ざしています。

誤解: チェーンの依存関係

誤解は、それぞれが先行するものへの依存関係を暗示しているということです。プロミスの成功した解決。しかし、これは当てはまりません。

Promise Chaining

Promise Chaining では、then のコールバック関数の結果が後続の Promise の解決になります。したがって:

  • コールバックが Promise を返す場合、新しい Promise はチェーンに同化されます。
  • コールバックが Promise を返さない場合、または未定義を返す場合、その値は直接渡されます。次の Promise のコールバックへ。

処理拒否

then コールバックで Promise がスローまたは拒否されたエラーは、次の Promise の catch または error コールバックをトリガーします。ただし、エラーがコールバック内で処理された場合、Promise が正常に解決されたかのようにチェーンが続行します。

例:

次のコードを考えてみましょう:

let promise1 = Promise.resolve(42);
let promise2 = promise1.then(
  (value) => value * 2,
  (err) => {
    console.error('Error in promise1:', err);
    // Handle the error (e.g., return a new promise)
  }
);
promise2.then((value) => console.log('Value from promise2:', value));
ログイン後にコピー

この例では、promise1 が拒否された場合、そのエラー ハンドラーはエラーをログに記録し、デフォルト値を返します。これにより、promise2 は、promise1 から正常な応答を受信したかのように処理を進めることができます。

アプリケーションからデータベースの更新まで

データベースの更新の例では、db.query のエラーが発生します。は then コールバックで処理され、デフォルト値が提供されます。これにより、db.query が失敗した場合でも、後続の then コールバックを続行し、データベースの更新を実行できます。

ベスト プラクティス

一貫したエラー処理を確保するには、次のことを考慮してください。次のベスト プラクティス:

  • catch または try-catch を使用した明示的なエラー処理を使用して拒否を処理します。
  • エラー ハンドラーから拒否された Promise を再スローするか返して、エラーがチェーンに伝播するのを避け、適切な処理を確保します。
  • Promise.all() を使用して、複数の Promise からのエラーを集約して処理します。それらを 1 か所にまとめます。

以上が連鎖的な約束が拒否を無視することがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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