Heim  >  Artikel  >  Web-Frontend  >  Garantiert Promise.all, dass die Reihenfolge der aufgelösten Werte mit der iterierbaren Eingabereihenfolge übereinstimmt?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 14:41:31580Durchsuche

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>

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!

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