Heim > Web-Frontend > js-Tutorial > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-11-03 05:40:02
Original
870 Leute haben es durchsucht

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?
});
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage