Maison > interface Web > js tutoriel > Promise.all garantit-il que l'ordre des valeurs résolues correspond à l'ordre itérable d'entrée ?

Promise.all garantit-il que l'ordre des valeurs résolues correspond à l'ordre itérable d'entrée ?

Barbara Streisand
Libérer: 2024-11-03 14:41:31
original
625 Les gens l'ont consulté

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

Préserver l'ordre dans Promise.all

Promise.all est une fonction JavaScript qui prend un itérable de promesses et renvoie une seule promesse qui résout une fois que toutes les promesses d'entrée ont été résolues. Il est souvent utilisé pour attendre la fin de plusieurs opérations asynchrones avant de continuer.

Une question courante se pose : l'ordre des valeurs résolues dans la promesse de sortie est-il garanti pour correspondre à l'ordre des promesses d'entrée ?

Selon la documentation MDN, il semble que les valeurs transmises au rappel then() de Promise.all soient présentées dans l'ordre des promesses. Cette question demande la confirmation de la spécification.

La spécification Promise.all (https://tc39.github.io/ecma262/#sec-promise.all) indique que :

  • Promise.all(iterable) prend un itérable en entrée et le parcourt à l'aide de IteratorStep(iterator).
  • Chaque promesse résolue a un emplacement interne [[Index]], qui indique son index dans l'itérable d'origine.
  • La résolution est implémentée via Promise.all() Resolve, où l'emplacement [[Index]] de la promesse résolue est utilisé pour déterminer l'index de la valeur dans le tableau de sortie.

En combinant ces points, il est clair que la sortie de Promise.all suivra toujours strictement l'ordre de l'itérable d'entrée. Cela signifie que si vous transmettez un tableau à Promise.all, les valeurs résolues apparaîtront dans le tableau de sortie dans le même ordre que dans le tableau d'entrée.

Pour démontrer cela, considérons l'exemple suivant :

<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>
Copier après la connexion

Dans ce cas, le résultat sera [1, 2, 3, 4, 5], quelle que soit la promesse résolue en premier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal