Promises


As Promises representam uma abordagem mais moderna e eficiente para lidar com operações assíncronas no JavaScript. Anteriormente, o uso predominante eram as chamadas callback functions, que frequentemente levavam a um problema conhecido como callback hell, dificultando a leitura e manutenção do código devido ao encadeamento excessivo de callbacks.

Os 3 estados de uma Promise:

  • pending: Representa uma promessa que ainda está sendo processada (pendente).
  • fulfilled: Representa uma promessa que foi processada com sucesso (resolvida).
  • rejected: Representa uma promessa que foi rejeitada devido a algum erro durante o processamento.

Sintaxe

A criação de uma Promise envolve a instância de um objeto Promise, que recebe duas funções como argumentos: resolve e reject. A resolve é chamada quando a operação assíncrona é bem-sucedida, enquanto a reject é acionada em caso de falha.

new Promise((resolve, reject) => {
  // Código assíncrono...
});

Exemplo

function randomTime(min, max) {
  min *= 1000;
  max *= 1000;
  return Math.floor(Math.random() * (max - min) + min);
}
 
function wait(message) {
  return new Promise((resolve, reject) => {
    if (typeof message !== "string") {
      reject("Valor inválido");
      return;
    }
 
    setTimeout(() => {
      resolve(message);
    }, randomTime(1, 3));
  });
}
 
wait("Frase 1")
  .then((response) => {
    console.log(response);
    return wait("Frase 2");
  })
  .then((response) => {
    console.log(response);
    return wait("Frase 3");
  })
  .then((response) => {
    console.log(response);
  })
  .catch((error) => {
    console.log(error);
  });

Referências