Stack Overflow em Português Asked on November 27, 2021
Possuo um array em que quero executar cada item, porém um só poderá iniciar após finalizar o anterior. O exemplo abaixo está imprimindo na sequência 2000,5000,10000 o que me faz entender que os três itens foram executados simultaneamente. Gostaria que cada item iniciasse apenas após a finalização do anterior. Esperava que fosse impresso 10000,5000,2000.
const durations = [10000, 5000, 2000]
const timeOut = (t) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(t)
resolve(true)
}, t)
})
}
for (let index = 0; index < durations.length; index++) {
const element = durations[index];
timeOut(element);
}
Você pode esperar o retorno de cada promise. Fiz da seguinte forma, utilizando o async e await, dessa forma o loop no array irá aguardar o retorno da sua promise para cada item.
const durations = [10000, 5000, 2000]
const timeOut = (t) => {
return new Promise(resolve => setTimeout(resolve, t));
}
const init = async () => {
for(i = 0; i < durations.length; i++) {
const element = durations[i];
await timeOut(element);
console.log(element);
}
}
init();
O problema do seu é que o for
não está aguardando o retorno de suas promise
, dessa forma ele irá executar todos os elementos de uma vez.
Outra forma simplificada de escrever seu código
const durations = [10000, 5000, 2000]
const timeOut = (t) => new Promise(resolve => setTimeout(resolve, t));
const init = async () => {
for(const element of durations) {
await timeOut(element);
console.log(element);
}
}
init();
Answered by Diego Vieira on November 27, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP