Maison > interface Web > js tutoriel > `Promise.all()` préserve-t-il l'ordre des valeurs résolues ?

`Promise.all()` préserve-t-il l'ordre des valeurs résolues ?

DDD
Libérer: 2024-11-04 05:22:29
original
988 Les gens l'ont consulté

Does `Promise.all()` Preserve the Order of Resolved Values?

Promise.all : Préserver l'ordre des valeurs résolues

La méthode Promise.all() prend un itérable comme argument et renvoie un nouveau promesse qui se résout une fois que toutes les promesses de l'itérable ont été résolues. La question se pose : l'ordre des valeurs résolues est-il garanti pour correspondre à l'ordre des promesses dans l'itérable ?

Selon la documentation MDN, les valeurs résolues devraient apparaître dans l'ordre des promesses. Cependant, une référence directe à ce comportement spécifique n'est pas immédiatement apparente dans la spécification.

En approfondissant la spécification, nous constatons que PerformPromiseAll() est invoqué avec l'itérable passé à Promise.all(). PerformPromiseAll() parcourt ensuite l'itérable à l'aide de IteratorStep(), ce qui garantit l'ordre des promesses.

De plus, chaque promesse résolue possède un emplacement interne [[Index]] qui indique son index dans l'itérable d'entrée d'origine. Cet emplacement est utilisé pendant le processus de résolution pour garantir que le tableau de sortie conserve l'ordre d'origine.

En résumé, l'ordre des valeurs résolues dans Promise.all() est strictement conservé tant que l'entrée itérable est ordonné. Ceci est illustré dans l’extrait de code suivant :

<code class="js">const slow = new Promise(resolve => setTimeout(resolve, 200, 'slow'));
const instant = 'instant';
const quick = new Promise(resolve => setTimeout(resolve, 50, 'quick'));

Promise.all([slow, instant, quick]).then(responses => {
  responses.map(response => console.log(response));
});

// Output: [ 'instant', 'quick', 'slow' ]</code>
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal