ホームページ >ウェブフロントエンド >jsチュートリアル >ループ内で Promise ベースのコードを確実に同期実行するにはどうすればよいですか?

ループ内で Promise ベースのコードを確実に同期実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 19:22:30328ブラウズ

How to Ensure Synchronous Execution of Promise-Based Code in a Loop?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。