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
DDDoriginal
2024-11-04 05:22:29995parcourir

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>

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