Definição de Promise
Uma Promise
é um objeto que representa uma operação que pode:
- Pendente - ainda em execução.
- Resolvida - concluída com sucesso.
- Rejeitada - concluída com erro.
O que é uma Promise?
É como uma “promessa da vida real”: algo que pode dar certo ou errado no futuro.
Exemplo 1
let promessa = new Promise((resolve, reject) => {
let sucesso = true;
if (sucesso) {
resolve("🎉 Deu certo!");
} else {
reject("❌ Algo deu errado!");
}
});
promessa.then(msg => console.log(msg));
Como criar uma Promise
Exemplo 2
function esperar(ms) {
return new Promise(resolve => {
setTimeout(() => resolve("⏳ Espera concluída"), ms);
});
}
esperar(2000).then(msg => console.log(msg));
Usando then e catch
Exemplo 3
let promessa2 = new Promise((resolve, reject) => {
let numero = Math.random();
if (numero > 0.5) resolve("Número aceito: " + numero);
else reject("Número muito baixo: " + numero);
});
promessa2
.then(msg => console.log("✅", msg))
.catch(erro => console.log("⚠️", erro));
Resolve e Reject
Dentro de uma Promise
, usamos duas funções:
resolve(valor)
→ indica que a operação foi concluída com sucesso.reject(erro)
→ indica que a operação falhou.
Exemplo 1
let promessa = new Promise((resolve, reject) => {
let sucesso = true;
if (sucesso) resolve("✅ Deu certo!");
else reject("❌ Algo deu errado!");
});
promessa.then(console.log).catch(console.error);
Exemplo 2
function verificarNumero(n) {
return new Promise((resolve, reject) => {
if (n > 10) resolve("Maior que 10");
else reject("Menor ou igual a 10");
});
}
verificarNumero(15).then(console.log).catch(console.error);
Exemplo 3
function dividir(a, b) {
return new Promise((resolve, reject) => {
if (b === 0) reject("❌ Divisão por zero!");
else resolve(a / b);
});
}
dividir(10, 2).then(console.log).catch(console.error);
Finally
O finally()
é sempre executado, independente se a Promise foi resolvida ou rejeitada.
É útil para liberar recursos, fechar conexões ou exibir mensagens finais.
Exemplo 1
new Promise((resolve, reject) => {
resolve("✅ Sucesso!");
})
.then(console.log)
.catch(console.error)
.finally(() => console.log("Finalizado!"));
Exemplo 2
new Promise((resolve, reject) => {
reject("❌ Ocorreu um erro");
})
.then(console.log)
.catch(console.error)
.finally(() => console.log("Liberando recursos..."));
Exemplo 3
function simularRequisicao() {
return new Promise((resolve, reject) => {
setTimeout(() => reject("Servidor indisponível"), 1500);
});
}
simularRequisicao()
.then(console.log)
.catch(console.error)
.finally(() => console.log("⏳ Tentativa concluída"));
Promise.all()
O Promise.all()
executa várias Promises em paralelo e só resolve quando todas são concluídas com sucesso.
Se alguma falhar, ele rejeita tudo.
Exemplo 1
Promise.all([
Promise.resolve("🍎 Maçã"),
Promise.resolve("🍌 Banana"),
Promise.resolve("🍇 Uva")
]).then(console.log);
Exemplo 2 (com falha)
Promise.all([
Promise.resolve("✅ Ok 1"),
Promise.reject("❌ Falhou!"),
Promise.resolve("✅ Ok 2")
])
.then(console.log)
.catch(console.error);
Exemplo 3 (simulação de requisições)
function esperar(ms, msg) {
return new Promise(resolve => setTimeout(() => resolve(msg), ms));
}
Promise.all([
esperar(1000, "📦 Produto"),
esperar(2000, "🚚 Entrega"),
esperar(1500, "💳 Pagamento")
]).then(console.log);
Promise.allSettled()
Diferente do all()
, o allSettled()
espera todas as Promises terminarem,
seja com sucesso ou erro, e retorna o status de cada uma.
Exemplo 1
Promise.allSettled([
Promise.resolve("✅ Sucesso"),
Promise.reject("❌ Erro"),
])
.then(console.log);
Promise.race()
O Promise.race()
retorna a primeira Promise que finalizar (sucesso ou erro).
Exemplo 1
Promise.race([
new Promise(res => setTimeout(() => res("⏰ 1s"), 1000)),
new Promise(res => setTimeout(() => res("⏰ 2s"), 2000)),
])
.then(console.log);
Promise.any()
O Promise.any()
retorna a primeira Promise que for resolvida com sucesso.
Se todas falharem, gera um erro.
Exemplo 1
Promise.any([
Promise.reject("❌ Erro 1"),
Promise.reject("❌ Erro 2"),
Promise.resolve("✅ Sucesso na terceira!")
])
.then(console.log)
.catch(console.error);