ホームページ > 記事 > ウェブフロントエンド > Promise オペレーションで同期ループを確実に実行するにはどうすればよいですか?
問題ステートメント
ループが同期的に反復され、各反復のPromise とその後のログ操作 (logger.log(res)) は正しい順序で実行されますか?
Solution
Eschewing Promisewhile
promisewhile 関数は、promise によるループを容易にしますが、連鎖操作の実行順序は保証しません。
シリアル化に Reduce を使用する
必要な処理を維持するにはArray.prototype.reduce() を利用して、.then() 操作のフラット チェーンを作成できます。これにより、再帰の必要がなくなります。
<code class="javascript">function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }</code>
使用例
<code class="javascript">// Compose an array of email addresses var arrayOfEmailAddys = [...]; fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });</code>
利点
このアプローチでは、 Promisewhile メソッドには追加の変数と条件関数が必要です。さらに、コードが簡素化され、Promise 実行の正しい順序が確保されます。
以上がPromise オペレーションで同期ループを確実に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。