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 de manipulation de tableau intégrées telles que map() et réduire().
Promesse parallèle ou promesse série
Le problème réside dans l'exigence de maintenir 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 promesses souhaitée avec un ordre préservé, Array.prototype.reduce() est plus approprié.
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 des appels "db.getUser" est garantie d'être 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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3