Encadeando Promises em Javascript

wevertoum

Weverton Rodrigues

Posted on February 2, 2024

Encadeando Promises em Javascript

Sabe quando você precisa encadear várias promises e a chamada seguinte depende do resultado da chamada anterior? Isso é comum em muitos cenários de desenvolvimento, especialmente ao lidar com operações assíncronas, como cadastro de usuários em um sistema. Vamos explorar como podemos fazer isso de forma eficiente e organizada em JavaScript.

Para resolver esse problema, podemos usar o conceito de promises recursivas (ou encadeadas) em JavaScript. Vamos ver como podemos fazer isso em um exemplo prático:

async function postUsuario(usuario) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // Suponha que a chamada seja bem-sucedida aqui
      console.log(`Usuário ${usuario.nome} cadastrado com sucesso.`);
      resolve();
    }, 1000);
  });
}

async function sequentialPost(usuarios, index) {
  if (index >= usuarios.length) {
    return; // Encerra a recursão quando todos os usuários foram cadastrados
  }

  try {
    await postUsuario(usuarios[index]);
    await sequentialPost(usuarios, index + 1); // Chamada recursiva para o próximo usuário
  } catch (error) {
    console.error(`Erro ao cadastrar usuário ${usuarios[index].nome}:`, error);
    // Lidar com o erro, se necessário
  }
}

async function cadastrarUsuarios(usuarios) {
  await sequentialPost(usuarios, 0); // Inicia a recursão a partir do índice zero
}

const usuarios = [
  { nome: "João", email: "joao@example.com" },
  { nome: "Maria", email: "maria@example.com" },
  { nome: "Pedro", email: "pedro@example.com" }
];

cadastrarUsuarios(usuarios);
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, além da função postUsuario, adicionamos a função sequentialPost, que realiza o encadeamento das chamadas de cadastro dos usuários de forma recursiva. A função cadastrarUsuarios inicia o processo chamando sequentialPost com o array de usuários e o índice inicial zero.

Espero que tenha curtido!

💖 💪 🙅 🚩
wevertoum
Weverton Rodrigues

Posted on February 2, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related