このシナリオでは、次のことを確認する必要があります。
これに対する直接の組み込みソリューションはありませんが、この動作を実現する方法は次のとおりです。
再帰を使用した手動反復:
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 サイトの他の関連記事を参照してください。