Promises
Definição
Promise é um objeto que representa o resultado futuro de uma operação assíncrona, que pode ser concluída com sucesso (fulfilled) ou falhar (rejected).
Promises permitem escrever código assíncrono de forma mais legível e encadeável do que callbacks aninhados.
Elas ajudam a evitar o chamado callback hell e são base para o uso de async/await.
Uma promise possui três estados:
pending: operação em andamentofulfilled: operação concluída com sucessorejected: operação falhou
Objetivos do uso de Promises
- Encadear tarefas assíncronas com clareza.
- Evitar aninhamento excessivo de callbacks.
- Tratar erros de forma mais consistente.
- Representar valores que ainda não estão disponíveis.
Exemplo prático
Vamos simular a leitura de um dado com Promise:
function lerArquivo() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const conteudo = "Dados do arquivo";
resolve(conteudo);
}, 1000);
});
}
console.log("Início");
lerArquivo()
.then((dados) => {
console.log("Arquivo lido:", dados);
})
.catch((erro) => {
console.error("Erro:", erro);
});
console.log("Fim da função principal");
Saída esperada
Início
Fim da função principal
Arquivo lido: Dados do arquivo
A Promise representa a operação em andamento.
O método
.then()define o que fazer quando a operação for concluída.O método
.catch()lida com erros, caso ocorram.
Encadeamento de Promises
Um dos grandes benefícios das Promises é o encadeamento sequencial:
obterUsuario()
.then((usuario) => buscarPosts(usuario.id))
.then((posts) => console.log("Posts:", posts))
.catch((erro) => console.error("Erro:", erro));
Cada .then() recebe o valor resolvido anterior e retorna uma nova promise.
O ciclo de uma Promise
[Cria a promise]
↓
[Opera em segundo plano]
↓
resolve(valor) → executa then()
reject(erro) → executa catch()
Comparação com callbacks
| Aspecto | Callback | Promise |
|---|---|---|
| Leitura do código | Difícil quando há muitos níveis de aninhamento | Mais clara e sequencial com .then() |
| Tratamento de erros | Precisa ser implementado em cada função | Centralizado com .catch() |
| Encadeamento | Manual, com várias funções aninhadas | Encadeável com .then() em sequência |
| Ordem de execução | Menos intuitiva — oculta dentro das funções | Mais intuitiva — sequência visível e direta |
Observações
- Promises são o padrão moderno de programação assíncrona em JavaScript.
- Elas funcionam bem com
async/await, que são apenas uma forma mais elegante de lidar com Promises.