Promise ベースのコードが同期的に実行されることを保証するための正しいループ構造の検索
Promise ベースのコードを使用する場合、正しいループ構造は次のとおりです。非同期操作の同期実行を保証するために不可欠です。指定されたシナリオの目標は、各反復中に「db.getUser(email).then(function(res) { logger.log(res); })」が正しい順序で実行されることを保証するループを構築することです。
1 つのアプローチでは、カスタムの「promisewhile」関数を使用します。この方法は一般的なシナリオでは便利ですが、当面の特定のケースでは不必要な複雑さが生じます。代わりに、より簡単な解決策は、map() やreduce() などの組み込みの配列操作関数を活用することです。
パラレル プロミスとシリアル プロミス
問題は存在します応答の順序を維持するという要件があり、これにより Array.prototype.map() による並列アプローチの使用が不要になります。順序を保持して目的の Promise チェーンを構築するには、Array.prototype.reduce() の方が適しています。
例:
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()); }
このメソッドを使用すると、「db.prototype.reduce()」が実行されます。 getUser」呼び出しはシリアルであることが保証されており、結果の順序が確実に維持されます。コードは次のように呼び出すことができます:
var arrayOfEmailAddys = [...]; fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });
このアプローチにより、複雑なループや条件が不要になり、非同期操作を扱う場合でも、Promise チェーンが適切に実行されることが保証されます。
以上がループ内で Promise ベースのコードを確実に同期実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。