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