Promise.all
とPromise.allSettled
は、両方とも複数の約束を処理するために使用されるJavaScriptの方法ですが、彼らが彼らが返すことをどのように扱うかが異なります。
Promise.all
、約束を反復可能にし、反復可能な約束がすべて解決したときに解決する単一の約束を返します。返された約束の解決された値は、入力約束の解決された値の配列であり、それらが反復可能であったのと同じ順序でです。
一方、 Promise.allSettled
も約束を繰り返すことができますが、すべての約束が解決または拒否されるまで待ちます。返された約束は、すべての入力の約束が解決すると解決します(解決または拒否されました)。解決された値は一連のオブジェクトであり、各オブジェクトは、反復可能な対応する約束の結果を記述します。各status
には、 "fulfilled"
(解決した約束のために)または"rejected"
(拒否された約束のために)(拒否された約束のため)またはreason
フィールド(拒否された約束のため)のいずれかのvalue
フィールドがあります。
要約すると、重要な違いは、これらの方法が約束の拒否を処理する方法にあります: Promise.all
速く失敗し、 Promise.allSettled
のいずれかが拒否されるとすぐに拒否します。
Promise.all
、 Promise.allSettled
と比較して、Promiseの拒否を異なります。 Promise.all
を使用する場合、反復可能な拒否の約束のいずれかがあれば、 Promise.all
全体がすぐに拒否されます。拒否の理由は、拒否された最初の約束の理由になります。その後の約束は、彼らが解決または拒否しているかどうかにかかわらず、すでにPromise.all
の状態に影響しません。
対照的に、 Promise.allSettled
、拒否された約束に遭遇したときに拒否しません。代わりに、解決または拒否のいずれかを反復可能にするすべての約束を待ち続けています。すべての約束が解決すると、 Promise.allSettled
は各約束の結果を説明するオブジェクトの配列で解決します。
違いを説明するために、3つの約束がある例を考えてみましょう。2つは迅速に解決する2つと、遅延後に拒否するものです。 Promise.all
で、他の2つの約束がすでに解決されていても、約束は遅れた約束が拒否するとすぐに拒否されます。 Promise.allSettled
では、約束は最終的に解決され、2つの約束が解決され、1つが拒否されたことを示す配列で解決します。
Promise.allSettled
Promise.all
すべての約束の結果を知る必要があるシナリオで、それらが解決または拒否されるかどうかにかかわらず、すべてを使用することを選択します。ここにいくつかの特定のシナリオがあります:
Promise.allSettled
。リクエストに失敗したエラーを処理しながら、成功した応答を処理できます。Promise.allSettled
、プロセス全体を中断することなく、どの操作が成功し、どの操作が失敗したかを理解するのに役立ちます。Promise.allSettled
を使用して利用可能なすべてのデータとエラーメッセージを表示し、最初のエラーで停止しないことでユーザーエクスペリエンスを改善できます。Promise.allSettled
デバッグまたは監視の目的に役立つ包括的な結果を提供します。 Promise.all
とPromise.allSettled
を使用することのパフォーマンスへの影響は、次のように要約できます。
Promise.all
すべての約束が迅速に解決した場合、すべてが解決するのが速くなる可能性がありますが、約束が拒否された場合、すぐに拒否されます。これは、さらに約束の処理を停止するため、早期の拒絶が望ましいシナリオで有益です。一方、 Promise.allSettled
、すべての約束が解決するのを常に待ちます。Promise.all
、Promiseが拒否されたらすぐに処理を停止するため、より少ないリソースを使用する場合があります。 Promise.allSettled
、特にいくつかの約束が長期的またはリソース集中的である場合、より多くのリソースを使用する可能性がある可能性があるため、解決するまですべての約束を処理し続けます。Promise.all
を使用すると、単一の拒否を処理するだけで、場合によってはエラー処理を簡素化できます。 Promise.allSettled
には、さまざまな結果を処理する必要があります。これには、より複雑なエラー処理ロジックが含まれる場合があります。Promise.allSettled
すべての約束が完了まで実行されることを保証します。これは、すべての約束の結果が必要なシナリオでは有利ですが、最初の障害後にさらに処理する必要がない場合は、不利な点になる可能性があります。要約すると、 Promise.all
特定の状況でより速く、よりリソース効率が高くなる可能性がありますが、 Promise.allSettled
、処理時間の増加とリソースの使用の潜在的なコストでより包括的な結果を提供します。それらの選択は、アプリケーションの特定の要件に基づいている必要があります。
以上がPromise.allとPromise.allsettledの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。