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.