Promises em JavaScript – Aplicações em ES6 e Angularjs

Escolhas Inteligentes está no WhatsApp! Entre no canal e acompanhe guias de compra, comparativos, ofertas e cupons selecionados.

Introdução

Antes de mais nada, vamos falar sobre Promises em JavaScript. Elas são uma das características mais importantes da programação moderna, especialmente no contexto do ES6 e do AngularJS. A princípio, as Promises (promessas) ajudam a gerenciar operações assíncronas de maneira mais clara e eficiente. Além disso, seu uso se tornou indispensável para lidar com requisições a APIs e outros processos que exigem um tempo de resposta.

O que são Promises?

Primeiramente, é essencial entender o conceito de Promises. Uma promessa é um objeto que representa a eventual conclusão (ou falha) de uma operação assíncrona. Em outras palavras, é uma maneira de lidar com valores que ainda não estão disponíveis.

Estados das Promises

Acima de tudo, as Promises têm três estados:

  1. Pending (Pendente): Estado inicial, quando a Promises ainda não foi concluída.
  2. Fulfilled (Cumprida): Quando a operação foi concluída com sucesso.
  3. Rejected (Rejeitada): Quando a operação falhou.

Como Criar uma Promessa

Em primeiro lugar, vamos ver como criar uma promessa em JavaScript. Para isso, utilizamos o construtor Promise.

const minhaPromessa = new Promise((resolve, reject) => {
    // operação assíncrona
});

Exemplo Prático de Promessa

Além disso, vejamos um exemplo prático:

const minhaPromessa = new Promise((resolve, reject) => {
    const sucesso = true; // Simulação de sucesso
    if (sucesso) {
        resolve("Operação realizada com sucesso!");
    } else {
        reject("Falha na operação.");
    }
});

minhaPromessa
    .then(resposta => console.log(resposta))
    .catch(erro => console.error(erro));

Usando Promises com Fetch

Contudo, um dos casos de uso mais comuns é com a API Fetch. Essa API permite realizar requisições HTTP de forma assíncrona.

Exemplo com Fetch

Sobretudo, aqui está um exemplo de como usar Promises com Fetch:

fetch('https://api.exemplo.com/dados')
    .then(response => response.json())
    .then(dados => console.log(dados))
    .catch(erro => console.error("Erro ao buscar os dados:", erro));

Encadeamento de Promises

Juntamente com o uso básico, o encadeamento de Promessas é uma técnica poderosa. Isso permite que você execute várias operações assíncronas em sequência.

Como Funciona?

Ou seja, você pode chamar .then() múltiplas vezes:

minhaPromessa
    .then(resposta => {
        console.log(resposta);
        return "Próxima operação";
    })
    .then(novaResposta => console.log(novaResposta))
    .catch(erro => console.error(erro));

Erros Comuns ao Usar Promessas

Todavia, mesmo que as promessas sejam uma ferramenta incrível, alguns erros podem ocorrer. Aqui estão alguns dos mais comuns:

  1. Não retornar uma promessa: Ao usar .then(), é crucial retornar outra promessa, caso contrário, o encadeamento não funcionará corretamente.
  2. Não tratar erros: Sempre use .catch() para lidar com erros, mesmo que não espere falhas.

Async/Await: Uma Alternativa

Primeiramente, uma alternativa ao uso tradicional é o async/await, introduzido no ES2017. Essa abordagem simplifica o código assíncrono.

Exemplo de Async/Await

Por exemplo:

const obterDados = async () => {
    try {
        const resposta = await fetch('https://api.exemplo.com/dados');
        const dados = await resposta.json();
        console.log(dados);
    } catch (erro) {
        console.error("Erro ao buscar os dados:", erro);
    }
};

obterDados();

Promises em AngularJS

Acima de tudo, AngularJS utiliza promessas de forma nativa com seu serviço $q. Isso torna o manuseio de requisições assíncronas ainda mais fácil.

Uso do Serviço $q

Principalmente, o serviço $q permite criar uma Promise em seus controladores e serviços.

app.controller('MeuController', function($scope, $q) {
    const minhaPromessa = $q((resolve, reject) => {
        // operação assíncrona
    });

    minhaPromessa.then(resposta => {
        $scope.mensagem = resposta;
    }).catch(erro => {
        console.error(erro);
    });
});

Vantagens das Promises

Em suma, as promessas oferecem várias vantagens:

  1. Código mais limpo: Elas evitam o “callback hell”.
  2. Manejo de erros: Através do método .catch(), é mais fácil lidar com erros.
  3. Facilidade de encadeamento: É simples executar múltiplas operações assíncronas em sequência.

Conclusão

Portanto, as Promises em JavaScript são fundamentais para o desenvolvimento de aplicações modernas. Além disso, sua aplicação em ES6 e AngularJS torna o processo de manipulação de operações assíncronas muito mais eficaz. Em suma, dominar esse conceito é essencial para qualquer desenvolvedor que deseje criar aplicações robustas e escaláveis.

Perguntas Frequentes

O que é uma Promise em JavaScript?

Uma Promise é um objeto que representa a eventual conclusão ou falha de uma operação assíncrona.

Como posso lidar com erros em Promise?

Você pode usar o método .catch() para capturar e tratar erros de uma Promise.

Qual a diferença entre Promises e async/await?

As Promises são uma forma de lidar com operações assíncronas, enquanto async/await é uma sintaxe que simplifica o uso de Promises.

Promessas em JavaScript - Aplicações em ES6 e Angularjs
Curso de inteligência artificial online Gratuito no WhatsApp

Sobre o autor

Eduardo Henrique Gomes é professor do IFSP, doutorando em Ensino pela UFABC e pesquisador em tecnologia, inteligência artificial e educação digital. No EHGomes, publica análises, reviews e guias de compra com foco em uso real, limitações dos produtos e decisão consciente.

Saiba mais sobre a metodologia de avaliação do EHGomes.