Heim > Web-Frontend > js-Tutorial > Hauptteil

Garantiert Promise.all, dass die Reihenfolge der aufgelösten Werte mit der iterierbaren Eingabereihenfolge übereinstimmt?

Barbara Streisand
Freigeben: 2024-11-03 14:41:31
Original
580 Leute haben es durchsucht

Does Promise.all Guarantee the Order of Resolved Values Matches the Input Iterable Order?

Aufrechterhaltung der Ordnung in Promise.all

Promise.all ist eine JavaScript-Funktion, die eine Iteration von Versprechen entgegennimmt und ein einzelnes Versprechen zurückgibt, das aufgelöst wird Sobald alle Eingabeversprechen gelöst wurden. Es wird häufig verwendet, um auf den Abschluss mehrerer asynchroner Vorgänge zu warten, bevor fortgefahren wird.

Eine häufige Frage stellt sich: Stimmt die Reihenfolge der aufgelösten Werte im Ausgabeversprechen garantiert mit der Reihenfolge der Eingabeversprechen überein?

Der MDN-Dokumentation zufolge scheinen die an den then()-Rückruf von Promise.all übergebenen Werte in der Reihenfolge der Versprechen dargestellt zu werden. Diese Frage sucht nach Bestätigung durch die Spezifikation.

Die Promise.all-Spezifikation (https://tc39.github.io/ecma262/#sec-promise.all) besagt:

  • Promise.all(iterable) nimmt ein Iterable als Eingabe und iteriert darüber mit IteratorStep(iterator).
  • Jedes gelöste Promise hat einen internen [[Index]]-Slot, der seinen Index im ursprünglichen Iterable angibt.
  • Die Auflösung wird über Promise.all() Resolve implementiert, wobei der [[Index]]-Slot des aufgelösten Versprechens verwendet wird, um den Index des Werts im Ausgabearray zu bestimmen.

Wenn man diese Punkte kombiniert, wird klar, dass die Ausgabe von Promise.all immer strikt der Reihenfolge der iterierbaren Eingabe folgt. Das bedeutet, dass, wenn Sie ein Array an Promise.all übergeben, die aufgelösten Werte im Ausgabearray in derselben Reihenfolge erscheinen, in der sie im Eingabearray erschienen sind.

Um dies zu veranschaulichen, betrachten Sie das folgende Beispiel:

<code class="javascript">const promises = [1, 2, 3, 4, 5].map(Promise.resolve);
Promise.all(promises).then((results) => {
  console.log(results); // [1, 2, 3, 4, 5]
});</code>
Nach dem Login kopieren

In diesem Fall lautet die Ausgabe [1, 2, 3, 4, 5], unabhängig davon, welches Versprechen zuerst aufgelöst wird.

Das obige ist der detaillierte Inhalt vonGarantiert Promise.all, dass die Reihenfolge der aufgelösten Werte mit der iterierbaren Eingabereihenfolge übereinstimmt?. 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