Dans le code fourni, une tentative est faite pour créer une boucle for qui itère 10 fois et crée une promesse pour chacune itération. Cependant, la boucle s'exécute de manière synchrone, ce qui entraîne un résultat imprévisible. L'objectif est de garantir que chaque promesse ne s'exécute qu'après la résolution de la précédente.
Pour faciliter la solution, nous définissons une fonction d'assistance appelée délai qui promet la fonction setTimeout :
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
Pour garantir une exécution asynchrone, nous créons une promesse initiale qui se résout immédiatement. Chaque promesse suivante est chaînée à la précédente :
let p = Promise.resolve(); for (let i = 0; i < 10; i++) { p = p.then(() => delay(Math.random() * 1000)) .then(() => console.log(i)); }
Cette approche garantit que chaque itération de boucle crée une promesse qui se résout une fois la promesse précédente terminée. L'instruction console.log(i) sera exécutée dans le bon ordre, en imprimant les valeurs de 0 à 9.
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!