Heim  >  Artikel  >  Web-Frontend  >  Hier sind einige Titel im Fragestil, die zum bereitgestellten Artikel passen: * So erreichen Sie eine synchrone Ausführung mit Promise Chains: Ein Leitfaden für vereinfachte „promiseWhile“- und Array-Reduktionstechniken * S

Hier sind einige Titel im Fragestil, die zum bereitgestellten Artikel passen: * So erreichen Sie eine synchrone Ausführung mit Promise Chains: Ein Leitfaden für vereinfachte „promiseWhile“- und Array-Reduktionstechniken * S

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 11:52:00707Durchsuche

Here are a few question-style titles that fit the provided article:

* How to Achieve Synchronous Execution with Promise Chains: A Guide to Simplified `promiseWhile` and Array Reduction Techniques
* Synchronous Promise Loops Made Easy:  `PromiseWhile` and

So erstellen Sie synchrone Schleifen mit Promise-Ketten

Problem:

Konstruieren einer Schleife für Die Sicherstellung der synchronen Ausführung von Promise-Aufrufen und nachfolgenden Protokollierungsanweisungen kann eine Herausforderung darstellen. Dies gilt insbesondere bei der Verwendung von Bibliotheken wie Bluebird.

Lösung 1 (vereinfachte PromiseWhile-Funktion):

<code class="javascript">var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())
            .then(loop)
            .catch(resolver.reject);
    };

    loop();

    return resolver.promise;
};</code>

Diese vereinfachte Version der PromiseWhile-Funktion erfordert die Übergabe von Rückrufen als Argumente für die Bedingungs- und Aktionsparameter.

Lösung 2 (Verwenden der Array-Reduktion):

Ein alternativer Ansatz besteht darin, ein Array von E-Mail-Adressen zu reduzieren und eine entsprechende Asynchronisierung vorzunehmen Aufruf für jeden:

<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>

Dieser Ansatz erstellt eine flache .then()-Kette und behält die ursprüngliche Reihenfolge der Antworten bei.

Verwendung:

Der Aufruf von fetchUserDetails erfordert ein Array von E-Mail-Adressen:

<code class="javascript">fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});</code>

Dieser Ansatz macht einen äußeren Zähler oder eine Bedingungsfunktion überflüssig. Das Limit wird durch die Länge des E-Mail-Arrays bestimmt.

Das obige ist der detaillierte Inhalt vonHier sind einige Titel im Fragestil, die zum bereitgestellten Artikel passen: * So erreichen Sie eine synchrone Ausführung mit Promise Chains: Ein Leitfaden für vereinfachte „promiseWhile“- und Array-Reduktionstechniken * S. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn