Oi Daniel, tudo bem?
Realmente lidar com Promises
pode ser um pouco complicado no início.
O que acontece é que o forEach
não é projetado para lidar com operações assíncronas, portanto, ele não vai esperar a Promise ser resolvida. Uma alternativa para isso é utilizar o for...of
combinado com async/await, que vai garantir que cada iteração do loop espere a Promise ser resolvida antes de prosseguir para a próxima.
Um exemplo de como você pode fazer isso:
// Suponha que temos um array de IDs de projetos
let projetos = ['id1', 'id2', 'id3'];
// Função para simular a requisição get
let getProjeto = (id) => {
return new Promise(resolve => {
setTimeout(() => {
resolve(`Projeto ${id}`);
}, 2000);
});
}
let processarProjetos = async () => {
let resultados = [];
for (let id of projetos) {
let resultado = await getProjeto(id);
resultados.push(resultado);
}
return resultados;
}
processarProjetos().then(resultados => console.log(resultados));
A função getProjeto(id)
simula uma requisição get que retorna uma Promise.
A função processarProjetos()
utiliza um loop for...of
para iterar sobre o array de IDs de projetos, e para cada ID, ela espera a Promise retornada por getProjeto(id)
ser resolvida antes de prosseguir para a próxima iteração.
Espero ter ajudado.
Um abraço e bons estudos.