Maison  >  Article  >  interface Web  >  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
Barbara Streisandoriginal
2024-11-03 14:41:31578parcourir

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>

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!

Déclaration:
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