Resolva o primeiro sucesso de várias promises no JavaScript com AggregateError
Já precisou de uma resposta rápida enquanto aguardava mais de uma promessa (promise)? Com Promise.any, você pode passar um array de promessas e capturar a primeira que for bem-sucedida, ignorando as que falharem.
Aqui está um exemplo prático para entender essa abordagem:
// Crio três promessas: duas que rejeitam e uma que resolve
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => reject(new Error("Erro na promessa 1")), 2000);
});
const promise2 = new Promise((resolve) => {
setTimeout(() => resolve("Promessa 2 resolvida"), 3000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => reject(new Error("Erro na promessa 3")), 1000);
});
// Usa Promise.any para pegar a primeira promessa que for bem-sucedida
(async function getFirstSuccessPromise() {
try {
const firstResolved = await Promise.any([promise1, promise2, promise3]);
console.log("Primeira promessa resolvida:", firstResolved);
} catch (err) {
if (err instanceof AggregateError) {
console.log("AggregateError capturado:");
err.errors.forEach(e => console.log(e.message));
}
}
})();
Nesse exemplo, o código irá garantir o retorno da segunda promessa, pois é a primeira que resolve com sucesso. Caso todas as promessas falhem, o Promise.any lança um AggregateError contendo todos os erros capturados, permitindo o tratamento conjunto.
Cenário de uso real
Um exemplo prático para Promise.any é em validações de formulário. Suponha que você precise validar um campo como CPF, RG ou CEP. Você pode consultar múltiplas APIs para verificar esses dados e, com Promise.any, o código usará a primeira resposta bem-sucedida, agilizando o processo de validação.