Trouver la structure de boucle correcte pour garantir que le code basé sur les promesses s'exécute de manière synchrone
Lorsque vous travaillez avec du code basé sur des promesses, la structure de boucle correcte est essentiel pour garantir l’exécution synchrone des opérations asynchrones. Dans le scénario donné, l'objectif est de construire une boucle qui assure l'exécution de "db.getUser(email).then(function(res) { logger.log(res); })" dans le bon ordre lors de chaque itération.
Une approche utilise une fonction "promiseWhile" personnalisée. Bien que cette méthode puisse être utile pour des scénarios généraux, elle introduit une complexité inutile pour le cas spécifique en question. Au lieu de cela, une solution plus simple consiste à exploiter les fonctions intégrées de manipulation de tableaux telles que map() et réduire().
Promesses parallèles ou série
Le problème réside dans l'obligation de conserver l'ordre des réponses, ce qui élimine l'utilisation d'une approche parallèle via Array.prototype.map(). Pour construire la chaîne de promesse souhaitée avec un ordre préservé, Array.prototype.reduce() est plus adapté.
Exemple :
function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }
En utilisant cette méthode, l'exécution du fichier "db. getUser" est garanti en série, garantissant que l'ordre des résultats est maintenu. Le code peut être appelé comme suit :
var arrayOfEmailAddys = [...]; fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });
Cette approche élimine le besoin de boucles ou de conditions complexes et garantit la bonne exécution de la chaîne de promesses, même lorsqu'il s'agit d'opérations asynchrones.
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!