J'utilise node.js et j'ai un problème avec for-loop et promise. Comment puis-je attendre promise.then () avant la prochaine étape de la boucle for?
var array = ["apple", "orange"] for (var i in array) { console.log(array[i]) var promise = //any promise, doesn't matter now promise.then(function(result) { console.log(array[i]) }) .catch(function() { console.log("Promise Rejected"); }); }
Je m'attends à ce que la sortie soit "pomme", "pomme", "orange", "orange ", mais le résultat réel est" pomme "," orange "," orange "," orange "
3 Réponses :
Vous pouvez utiliser async / await pour attendre l'exécution. Quelques mises à jour dans votre code comme -
async function test() { var array = ["apple", "orange"]; for (var i in array) { try{ console.log(array[i]) var promise = //any promise, doesn't matter now await promise; console.log(array[i]) }catch(err) { console.log("Promise Rejected"); } } }
Nous pouvons utiliser async / await pour nous donner ce comportement. La fonction testAwait () retournera immédiatement, mais nous attendez la sortie de getResult () à chaque itération de la boucle.
var array = ["apple", "orange"] // Mock function, could represent an API call etc.. function getResult(arg) { return new Promise(resolve => setTimeout(resolve, 500, arg + "_result")); } async function testAwait() { for (var i in array) { console.log("Loop counter:", i) console.log("Input:", array[i]) // getResult returns a Promise, we'll _await_ it here.. let result = await getResult(array[i]); console.log("Result:", result); } } testAwait();
Vous pouvez utiliser promesses < / a> ou ASYNC / Attendre pour une manipulation complexe Nous devons utiliser à la fois Promise avec async / attendre .
en utilisant une promesse forte> p>
Copie possible de En attente pour Promise avant de passer à l'itération suivante dans une boucle dans Node.js