Promise

Uma Promise (promessa) em JavaScript é um objeto que representa o resultado de uma operação assíncrona. Ela pode estar em um dos três estados: pendente (pending), realizada (resolved), ou rejeitada (rejected). As Promises são usadas para lidar com tarefas assíncronas de forma mais organizada e eficiente, evitando o uso excessivo de callbacks aninhados.

Quando uma Promise é criada, ela executa uma função que pode ser assíncrona. Essa função recebe dois parâmetros, resolve e reject, que são funções fornecidas pelo JavaScript para indicar se a operação assíncrona foi bem-sucedida (resolve) ou falhou (reject). Dentro da função assíncrona, quando a tarefa é concluída com sucesso, chamamos resolve(valor) para retornar o resultado desejado. Se ocorrer um erro ou a tarefa falhar, chamamos reject(erro) para indicar o motivo da falha.

Por exemplo:

let minhaPromise = new Promise((resolve, reject) => {
  // Simulando uma operação assíncrona
  setTimeout(() => {
    let sucesso = true; // Mudar para false para simular um erro
    if (sucesso) {
      resolve("Operação concluída com sucesso!");
    } else {
      reject("Erro: operação falhou!");
    }
  }, 4000); // Tempo de espera de 4 segundos
});

minhaPromise.then((resultado) => {
  console.log(resultado); // Resultado quando a Promise é resolvida
}).catch((erro) => {
  console.error(erro); // Mensagem de erro quando a Promise é rejeitada
});

Neste exemplo, minhaPromise é uma Promise que simula uma operação assíncrona. Se a operação for bem-sucedida, a Promise é resolvida e o resultado é capturado pelo método .then(). Se houver um erro, a Promise é rejeitada e o motivo é capturado pelo método .catch().

Encadeamento de Promises

As Promises podem ser encadeadas para executar uma sequência de operações assíncronas. Isso é feito usando o método .then() para lidar com a resolução de uma Promise e retornar outra Promise. Por exemplo:

minhaPromise
	.then((resultado) => {
		console.log(resultado);
		return outraPromise;
	})
	.then((resultado) => {
		console.log(resultado);
	})
	.catch((erro) => {
		console.error(erro);
	});

Neste exemplo, minhaPromise é resolvida e o resultado é capturado pelo método .then(). Em seguida, outraPromise é retornada e resolvida, e o resultado é capturado pelo próximo .then(). Se houver um erro em qualquer uma das Promises, ele será capturado pelo método .catch().

Async/Await

O ES8 (ECMAScript 2017) introduziu as palavras-chave async e await para simplificar o uso de Promises. A palavra-chave async é usada para declarar uma função assíncrona, que retorna uma Promise. A palavra-chave await é usada dentro de funções assíncronas para esperar a resolução de uma Promise.

Por exemplo:

async function minhaFuncao() {
	let resultado = await minhaPromise;
	console.log(resultado);
}

Neste exemplo, a função minhaFuncao() é declarada como assíncrona e aguarda a resolução da Promise minhaPromise usando a palavra-chave await. Quando a Promise é resolvida, o resultado é armazenado na variável resultado.

Exemplo AJaX com Promise

O código abaixo apresenta um exemplo completo de código escrito de AJaX escrito por meio de uma Promise. Neste diretório, você também encontrará exemplos mais simples do uso de Promise e async/await.

git clone -b dev https://github.com/rodrigoprestesmachado/cpw2
cd cpw2/exemplos/AJaX-promise
code .

Exercícios do Freecode camp

Referências 📚

Rodrigo Prestes Machado
CC BY 4.0 DEED

Copyright © 2024 RPM Hub. Distributed by CC-BY-4.0 license.