Por que o console.log() mostra "[ Promise { }, Promise { }, Promise { } ]"? O await não faz com que todas as promessas sejam resolvidas?
Por que o console.log() mostra "[ Promise { }, Promise { }, Promise { } ]"? O await não faz com que todas as promessas sejam resolvidas?
Oi Luidi,
O await
dentro do map
faz com que cada promessa de leitura de arquivo seja resolvida individualmente, mas o map
em si retorna um novo array de promessas, e não os resultados dessas promessas.
Por isso, o console.log
mostra um array de Promise
pendentes. 🤔
Para obter os resultados, você precisa usar Promise.all
para aguardar a resolução de todas as promessas do array.
Veja um exemplo:
async function lerMultiplosArquivos(arrayDeCaminhos) {
const arrayDePromessas = arrayDeCaminhos.map(async (caminho) => {
return await fs.promises.readFile(caminho, "utf-8");
});
const resultados = await Promise.all(arrayDePromessas);
console.log(resultados);
}
Neste exemplo, Promise.all(arrayDePromessas)
aguarda que todas as promessas em arrayDePromessas
sejam resolvidas e retorna um novo array com os resultados. 👍
Para saber mais: Documentação do Promise.all no MDN -
Continue explorando e aprofundando seus conhecimentos! 💪