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