Entendendo Promises JavaScript: Um Guia Prático para Iniciantes
Entenda o que são Promises JavaScript e como criá-las, com exemplos práticos, linguagem acessível e um arquivo para praticar!
Uma Promise em JavaScript é um objeto que representa o resultado futuro de uma operação assíncrona — algo que ainda vai terminar, como uma requisição de rede. Ela tem três estados: pending (pendente), fulfilled (resolvida) e rejected (rejeitada). Você cria com new Promise((resolve, reject) => {...}) e trata o resultado com .then() (sucesso) e .catch() (erro).
Promises em JavaScript são um conceito essencial para lidar com operações assíncronas, como requisições a APIs, aprenda a usá-las de forma eficiente em seus projetos!
Para fazer o download do(s) arquivo(s) utilizados na aula, preencha com o seu e-mail:
Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.
O que são Promises e para que servem?
O que é uma Promise?
Uma Promise é um objeto que representa uma operação assíncrona, ou seja, algo que não entrega um resultado imediatamente, mas "promete" entregá-lo no futuro. Ela pode estar em três estados:
- Pending: Aguardando conclusão.
- Fulfilled: Concluída com sucesso (usa resolve).
- Rejected: Concluída com erro (usa reject).
Para que serve?
Promises são usadas para gerenciar operações que levam tempo, como carregar dados de uma API. Em vez de retornar o resultado direto, a Promise garante que você será notificado quando o resultado estiver pronto ou se ocorrer um erro.
Exemplo prático: Ao fazer uma requisição a uma API, você recebe uma Promise que será resolvida com os dados ou rejeitada com um erro.
Como Criar uma Função que Simula Carregamento de Dados?
Como simular uma Promise?
Vamos criar uma função que simula o carregamento de dados com um atraso, usando setTimeout para imitar uma operação assíncrona.
function carregarDados() {
console.log("Estamos carregando os dados...");
return new Promise((resolve, reject) => {
setTimeout(() => {
const certoErrado = true; // Simula sucesso
if (certoErrado) {
resolve("Deu certo no carregamento!");
} else {
reject("Deu erro na hora de carregar!");
}
}, 3000); // 3 segundos de espera
});
}- Explicação:
- new Promise: Cria a Promise com dois parâmetros: resolve (sucesso) e reject (erro).
- setTimeout: Simula um atraso de 3 segundos.
- certoErrado: Variável para simular sucesso (true) ou erro (false).
- resolve e reject: Retornam a mensagem correspondente.
Quando usar?
Use esse padrão para criar Promises em funções que envolvem operações assíncronas, como chamadas a APIs ou leitura de arquivos.
Como Retornar uma Promise de Forma Prática?
Como funciona o retorno de uma Promise?
Quando você chama a função carregarDados(), ela não retorna um valor direto, mas uma Promise. Para acessar o resultado, você precisa usar os métodos .then() (para sucesso) e .catch() (para erros).
carregarDados()
.then((resposta) => console.log(resposta))
.catch((erro) => console.log(erro));- Código:
- Explicação:
- .then(): Executa quando a Promise é resolvida (fulfilled), recebendo o valor do resolve.
- .catch(): Executa quando a Promise é rejeitada (rejected), recebendo o valor do reject.
Resultado:
- Se certoErrado = true: Exibe "Deu certo no carregamento!" após 3 segundos.
- Se certoErrado = false: Exibe "Deu erro na hora de carregar!".
O que são e Como Usar Resolve e Reject?
O que são resolve e reject?
- resolve: Função chamada quando a operação assíncrona é concluída com sucesso, passando o resultado para o .then().
- reject: Função chamada quando ocorre um erro, passando o erro para o .catch().
Como usar?
No exemplo anterior, resolve e reject são usados dentro da Promise para definir o resultado:
- resolve("Deu certo no carregamento!"): Retorna a mensagem de sucesso.
- reject("Deu erro na hora de carregar!"): Retorna a mensagem de erro.
Quando usar?
Use resolve para entregar resultados bem-sucedidos e reject para sinalizar falhas em operações assíncronas.
Como Entender o JavaScript Assíncrono na Prática?
O que é JavaScript assíncrono?
JavaScript assíncrono permite que o código continue executando enquanto espera por operações demoradas, como chamadas a APIs ou temporizadores. Promises são a base para gerenciar essas operações.
- Por que usar Promises?
Elas evitam o bloqueio do código, permitindo que você trate o resultado (ou erro) quando estiver pronto, sem travar a aplicação. - Exemplo prático: No código acima, setTimeout simula uma espera, e a Promise garante que o resultado só seja processado após 3 segundos.
Quando usar?
Use Promises sempre que precisar lidar com operações que não retornam resultados imediatamente, como requisições HTTP ou animações.
Como Executar e Testar uma Promise Passo a Passo?
Como testar a Promise?
- Crie uma função que retorna uma Promise (como carregarDados).
- Chame a função e use .then() para tratar o sucesso e .catch() para tratar o erro.
- Execute no navegador (use Live Server para rodar o arquivo HTML com o script).
- Abra o console (F12) e observe:
- A mensagem "Estamos carregando os dados..." aparece imediatamente.
- Após 3 segundos, aparece o resultado (
resolveoureject Sexoreject`).
Exemplo de saída no console:
- "Estamos carregando os dados..."
- Após 3 segundos: "Deu certo no carregamento!" (ou "Deu erro na hora de carregar!" se certoErrado = false).
Como Usar o Método .then() para Tratar Sucesso?
O que faz o .then()?
O método .then() é chamado quando a Promise é resolvida com sucesso, recebendo o valor retornado por resolve.
carregarDados().then((resposta) => console.log(resposta));Exibe "Deu certo no carregamento!" após a Promise ser resolvida.
Dica: Você pode encadear múltiplos .then() para processar respostas complexas, como veremos no próximo tópico.
Quando usar?
Use .then() para manipular o resultado de uma Promise bem-sucedida.
Como Lidar com Falhas Usando o Método .catch()?
O que faz o .catch()?
O método .catch() captura erros lançados por reject ou falhas na execução da Promise.
carregarDados().catch((erro) => console.log(erro));Exibe "Deu erro na hora de carregar!" se certoErrado = false.
Quando usar?
Use .catch() para tratar erros de forma controlada, evitando que a aplicação quebre.
Como Aplicar Promises com fetch() e APIs Reais?
Como usar Promises com fetch?
O método fetch() faz requisições HTTP e retorna uma Promise. Você pode encadear .then() para processar a resposta e .catch() para tratar erros.
fetch('https://api.exemplo.com/dados')
.then((response) => response.json())
.then((data) => console.log(data))
.catch((erro) => console.log("Erro ao buscar dados:", erro));- Explicação:
- fetch() retorna uma Promise com um objeto Response.
- response.json() é outra Promise que converte a resposta em JSON.
- O segundo .then() exibe os dados JSON.
- .catch() trata erros, como falhas de conexão.
Exemplo de saída: O console exibe os dados da API (ex.: um objeto JSON com informações) ou uma mensagem abordando o erro.
Quando usar?
Use fetch com Promises para buscar dados de APIs em aplicações web, como listas de produtos ou informações de usuários.
Quando e Por que Usar Promises em Seus Projetos?
Por que usar Promises?
- Promises gerenciam operações assíncronas de forma clara e organizada.
- Evitam o "callback hell" (aninhamento excessivo de callbacks).
- Permitem encadear ações com
.then()e tratar erros com.catch().
Quando usar Promises?
Use Promises em:
- Requisições a APIs (ex.: fetch).
- Operações com atraso, como animações ou temporizadores.
- Qualquer tarefa que não entrega resultados imediatamente.
Resumo das Estruturas de Promises
| Método/Função | Descrição | Uso |
|---|---|---|
| new Promise | Cria uma Promise com resolve (sucesso) e reject (erro). | Definir operações assíncronas. |
| .then() | Trata o resultado de uma Promise resolvida. | Processar dados de sucesso. |
| .catch() | Captura erros de uma Promise rejeitada. | Tratar falhas. |
| fetch() | Faz requisições HTTP, retornando uma Promise. | Buscar dados de APIs. |
Perguntas frequentes
1. O que são Promises em JavaScript?
São objetos que representam o resultado de uma operação assíncrona que ainda não terminou. Uma Promise pode estar pendente, resolvida (deu certo) ou rejeitada (deu erro), permitindo tratar o resultado quando ele ficar pronto, sem travar o restante do código.
2. Como criar uma Promise em JavaScript?
Use new Promise((resolve, reject) => { ... }). Dentro, chame resolve(valor) quando a operação der certo e reject(erro) quando falhar. Quem usa a Promise trata o sucesso com .then() e o erro com .catch().
3. Para que servem resolve e reject?
São as funções que definem o desfecho da Promise. resolve(valor) marca a Promise como cumprida e entrega o resultado ao .then(). reject(erro) marca como rejeitada e envia o erro ao .catch(), permitindo tratar a falha de forma controlada.
4. Qual a diferença entre .then() e .catch()?
O .then() é executado quando a Promise é resolvida com sucesso e recebe o valor retornado. O .catch() é executado quando a Promise é rejeitada e recebe o erro. Juntos, eles tratam tanto o sucesso quanto a falha de uma operação assíncrona.
Conclusão
Promises são uma ferramenta poderosa no JavaScript para lidar com operações assíncronas, como chamadas a APIs ou temporizações. Com .then() e .catch(), você pode processar resultados e erros de forma clara, enquanto fetch permite integrar Promises a aplicações reais. Pratique criando funções com Promises e testando requições a APIs para dominar esse conceito essencial no desenvolvimento web!
Aprenda mais com nossos outros conteúdos sobre JavaScript, com guias e cursos fáceis de entender!
Caso prefira esse conteúdo no formato de vídeo-aula, assista aos vídeos abaixo ou acesse o nosso canal do YouTube!
O que você aprende neste vídeo
Resposta rápida: Nesta aula, o Diego ensina Promises em JavaScript (as "promessas") do zero. Uma promise representa uma operação que vai terminar no futuro (dar certo ou errado). Ele simula um carregamento de dados com setTimeout, mostra como tratar o sucesso com .then e o erro com .catch, e como encadear promises (a própria resposta de uma requisição é uma promise que vira .json).
Neste vídeo (11 min):
- 0:00 - O que são as Promises (promessas): uma operação que vai terminar no futuro.
- 4:00 - Simular um carregamento de dados com
setTimeout. - 8:00 - Tratar o sucesso com
.thene o erro com.catch. - 10:00 - Encadear promises: a resposta de uma requisição é uma promise (
.json).
Hashtag Treinamentos
Para acessar publicações de JavaScript, clique aqui!
Posts mais recentes de JavaScript
- Try Catch no JavaScript: Programação Defensiva na PráticaAprenda a usar try catch no JavaScript e melhore a sua programação defensiva!
- ExpressJS: Crie APIs de forma rápida e prática com JavaScriptO ExpressJS simplifica a criação de APIs com JavaScript e Node.js. Aprenda passo a passo a montar seu backend com rotas, testes e um exemplo prático de controle de estoque.
- Método forEach no JavaScript: automatize tarefas repetitivasAprenda como usar o Método forEach no JavaScript para automatizar tarefas repetitivas e gerar tabelas dinâmicas de forma prática e eficiente.
Posts mais recentes da Hashtag Treinamentos
- Planilha de Controle de Notas Fiscais no Excel [Grátis]Baixe a planilha de controle de notas fiscais no Excel grátis: calcule ISS e retenções, veja o que está em aberto e gere a cobrança de cada nota de serviço.
- Qual IA usar na empresa: ChatGPT, Claude ou Perplexity?Qual IA usar na empresa: veja as diferenças entre ChatGPT, Claude e Perplexity e quando cada um rende mais em cada área da sua equipe.
- Apostilas Gratuitas em PDF: Excel, Power BI, Python e IABaixe apostilas gratuitas em PDF de Excel, Power BI, Python, Claude e agentes de IA, com exercícios e gabarito. Escolha a sua e comece hoje.







