Encadeando Promises em Javascript
Weverton Rodrigues
Posted on February 2, 2024
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);
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!
Posted on February 2, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.