Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida com promisses (dentro de um foreach)

estou tomando uma surra aqui tentando usar promisses.

imaginem que faço uma requisição $get()

o resultado dela me dá uma lista (pauta de reunião)

faço um foreach{

incluo em um array apenas os campos que quero da reunião faço outra requisição $get() baseada no código do projeto (extraído no primeiro get). incluo os dados do projeto no item do array

}

o problema é que o foreach não espera o resultado do segundo get. Continua

como fariam para fazer o foreach esperar o regultado do get?

2 respostas
solução!

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.

Ei estava de férias e não vi a resposta, vou testar agora.

Muito obrigado