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!