Promises: uma promessa de que algo vai acontecer (ou não)
Aprenda sobre Promises, uma forma mais estruturada de lidar com operações assíncronas.
Quando uma tarefa demora (como buscar dados da internet), o JavaScript não precisa travar tudo.
Para organizar esse “resultado que vem depois”, usamos Promise.
O que é uma Promise?
Uma Promise é um objeto que representa o resultado futuro de uma operação assíncrona.
Pense nela como um pedido de entrega:
- pedido foi feito, ainda aguardando → pending
- entrega chegou com sucesso → fulfilled
- algo deu errado na entrega → rejected
Estados de uma Promise
Uma Promise pode estar em 3 estados:
- pending (pendente)
- fulfilled (resolvida com sucesso)
- rejected (rejeitada com erro)
Depois que ela vira fulfilled ou rejected, não volta para pending.
Criando uma Promise (forma básica)
const promessa = new Promise(function (resolve, reject) {
const deuCerto = true;
if (deuCerto) {
resolve("deu tudo certo!");
} else {
reject("algo deu errado!");
}
});
resolve(...)→ sucessoreject(...)→ erro
Consumindo Promise com .then() e .catch()
promessa
.then(function (resultado) {
console.log("sucesso:", resultado);
})
.catch(function (erro) {
console.log("erro:", erro);
});
.then()trata sucesso.catch()trata falha
.finally(): sempre executa
finally roda independentemente de sucesso ou erro.
promessa
.then(function () {
console.log("ok");
})
.catch(function () {
console.log("falhou");
})
.finally(function () {
console.log("finalizou");
});
Ótimo para “encerrar processo”, como esconder loading.
Exemplo real com setTimeout
function esperar2s() {
return new Promise(function (resolve) {
setTimeout(function () {
resolve("passaram 2 segundos");
}, 2000);
});
}
esperar2s().then(function (msg) {
console.log(msg);
});
Encadeamento de Promises (chaining)
Você pode encadear operações com vários .then():
Promise.resolve(2)
.then(function (n) {
return n * 2; // 4
})
.then(function (n) {
return n + 1; // 5
})
.then(function (resultadoFinal) {
console.log(resultadoFinal); // 5
});
Cada then pode transformar e passar adiante.
Por que Promises melhoraram o código?
Comparado a muitos callbacks aninhados, Promises trouxeram:
- fluxo mais legível
- tratamento de erro mais organizado
- encadeamento mais claro
Elas também abriram caminho para async/await, que você verá na próxima lição.
Resumo da lição
Promiserepresenta um resultado futuro de operação assíncrona.- estados:
pending,fulfilled,rejected. thentrata sucesso,catchtrata erro,finallyexecuta sempre.- Promises ajudam a evitar código muito aninhado e melhoram a organização.