Heim  >  Artikel  >  Web-Frontend  >  Garantiert „Promise.all()“ die Reihenfolge der aufgelösten Werte?

Garantiert „Promise.all()“ die Reihenfolge der aufgelösten Werte?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 05:40:02871Durchsuche

Does `Promise.all()` Guarantee the Order of Resolved Values?

Promise.all: Reihenfolge aufgelöster Werte

Die Promise.all()-Methode ermöglicht die gleichzeitige Ausführung und Auflösung mehrerer Versprechen und bietet Entwicklern ein leistungsstarkes Werkzeug für die asynchrone Programmierung . Es stellt sich eine interessante Frage hinsichtlich der Reihenfolge der aufgelösten Werte innerhalb des Ergebnisarrays von Promise.all().

Nach Angaben des Mozilla Developer Network (MDN) wurden die Ergebnisse aus dem .then()-Rückruf von Promise erhalten. all() scheint in der gleichen Reihenfolge angeordnet zu sein, wie es die Eingabe verspricht. Zum Beispiel:

var somePromises = [1, 2, 3, 4, 5].map(Promise.resolve);
return Promise.all(somePromises).then(function(results) {
  console.log(results) //  is [1, 2, 3, 4, 5] the guaranteed result?
});

Wird dieses Verhalten durch die Promises-Spezifikation garantiert? Schauen wir uns die technischen Details an, um das herauszufinden.

Aufrechterhaltung der Ordnung in Promise.all()

In der Promise.all(iterable)-Methode stellt iterable eine Sammlung von Versprechen dar. Die Funktion PerformPromiseAll(iterator, constructionor, resultCapability) wird intern aufgerufen und iteriert mit IteratorStep(iterator) durch das Iterable.

Wenn ein Versprechen mit einem aufgelösten Wert abgewickelt wird, wird Promise.all() Resolve aufgerufen. Jedes aufgelöste Versprechen trägt einen internen [[Index]]-Slot, der seine Position innerhalb der ursprünglichen Iterable angibt.

Folglich behält die Ausgabe von Promise.all() eine strikte Reihenfolge bei, die der Reihenfolge der Versprechen in entspricht Die Eingabe ist iterierbar. Dies gilt, solange das bereitgestellte Iterable streng geordnet ist, beispielsweise ein Array.

Demonstration der Ordnungserhaltung

Hier ist ein praktisches Beispiel, das die Ordnungserhaltung in Promise.all() veranschaulicht:

<code class="javascript">// Used to display results
const write = msg => {
  document.body.appendChild(document.createElement('div')).innerHTML = msg;
};

// Different speed async operations
const slow = new Promise(resolve => {
  setTimeout(resolve, 200, 'slow');
});
const instant = 'instant';
const quick = new Promise(resolve => {
  setTimeout(resolve, 50, 'quick');
});

// The order is preserved regardless of what resolved first
Promise.all([slow, instant, quick]).then(responses => {
  responses.map(response => write(response));
});</code>

In diesem Szenario wird der Wert „sofort“ sofort aufgelöst, gefolgt von „schnell“ und „langsam“. Gemäß der Reihenfolgeerhaltung in Promise.all() werden die Ergebnisse jedoch in der Reihenfolge „langsam“, „sofort“, „schnell“ angezeigt, entsprechend der Reihenfolge der Versprechen innerhalb des Eingabearrays.

Das obige ist der detaillierte Inhalt vonGarantiert „Promise.all()“ die Reihenfolge der aufgelösten Werte?. 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