ホームページ > ウェブフロントエンド > jsチュートリアル > 一連の約束を順番に実行し、拒否を処理するにはどうすればよいですか?

一連の約束を順番に実行し、拒否を処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-24 13:18:11
オリジナル
1001 人が閲覧しました

How to Execute a Sequence of Promises in Order and Handle Rejections?

一連の Promise を同期する方法

このシナリオでは、次のことを確認する必要があります。

  • Promise が同じ内で解決される
  • いずれかの要素が拒否された場合、シーケンス全体が拒否される必要があります。拒否します。

これに対する直接の組み込みソリューションはありませんが、この動作を実現する方法は次のとおりです。

再帰を使用した手動反復:

function sequence(arr) {
  const index = 0;

  function next() {
    if (index < arr.length) {
      arr[index]().then(next).catch(reject);
      index++;
    }
  }
  next();
}
ログイン後にコピー

使用中Reduce:

function sequence(arr) {
  return arr.reduce((p, item) => {
    return p.then(() => item()); // Assuming each element is a promise-returning function
  }, Promise.resolve());
}
ログイン後にコピー

Promise.mapSeries の使用:

Bluebird Promise ライブラリを使用している場合は、その Promise.mapSeries メソッドを利用できます。

function sequence(arr) {
  return Promise.mapSeries(arr, item => item());
}
ログイン後にコピー

ES7 の使用Async/Await:

サポートされている場合、async/await を使用してこれを実現できます:

async function sequence(arr) {
  const results = [];
  for (let item of arr) {
    results.push(await item());
  }
  return results;
}
ログイン後にコピー

SPEX ライブラリの使用:

SPEX ライブラリは、動的シーケンスの反復処理を可能にするシーケンス メソッドを提供します。 Promise:

import { sequence } from 'spex';

function sequence(nextPromise) {
  // while nextPromise() creates and returns another promise, continue resolving it;
}
ログイン後にコピー

配列内のいずれかの要素が拒否された場合、シーケンスはその拒否に遭遇するとすぐに拒否されることを覚えておいてください。この動作により、それ以降の要素は処理されなくなります。

以上が一連の約束を順番に実行し、拒否を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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