Promises: uma promessa de que algo vai acontecer (ou não)

Aprenda sobre Promises, uma forma mais estruturada de lidar com operações assíncronas.

Quando uma tarefa demora (como buscar dados da internet), o JavaScript não precisa travar tudo.
Para organizar esse “resultado que vem depois”, usamos Promise.

O que é uma Promise?

Uma Promise é um objeto que representa o resultado futuro de uma operação assíncrona.

Pense nela como um pedido de entrega:

  • pedido foi feito, ainda aguardando → pending
  • entrega chegou com sucesso → fulfilled
  • algo deu errado na entrega → rejected

Estados de uma Promise

Uma Promise pode estar em 3 estados:

  1. pending (pendente)
  2. fulfilled (resolvida com sucesso)
  3. rejected (rejeitada com erro)

Depois que ela vira fulfilled ou rejected, não volta para pending.


Criando uma Promise (forma básica)

const promessa = new Promise(function (resolve, reject) {
  const deuCerto = true;

  if (deuCerto) {
    resolve("deu tudo certo!");
  } else {
    reject("algo deu errado!");
  }
});
  • resolve(...) → sucesso
  • reject(...) → erro

Consumindo Promise com .then() e .catch()

promessa
  .then(function (resultado) {
    console.log("sucesso:", resultado);
  })
  .catch(function (erro) {
    console.log("erro:", erro);
  });
  • .then() trata sucesso
  • .catch() trata falha

.finally(): sempre executa

finally roda independentemente de sucesso ou erro.

promessa
  .then(function () {
    console.log("ok");
  })
  .catch(function () {
    console.log("falhou");
  })
  .finally(function () {
    console.log("finalizou");
  });

Ótimo para “encerrar processo”, como esconder loading.


Exemplo real com setTimeout

function esperar2s() {
  return new Promise(function (resolve) {
    setTimeout(function () {
      resolve("passaram 2 segundos");
    }, 2000);
  });
}

esperar2s().then(function (msg) {
  console.log(msg);
});

Encadeamento de Promises (chaining)

Você pode encadear operações com vários .then():

Promise.resolve(2)
  .then(function (n) {
    return n * 2; // 4
  })
  .then(function (n) {
    return n + 1; // 5
  })
  .then(function (resultadoFinal) {
    console.log(resultadoFinal); // 5
  });

Cada then pode transformar e passar adiante.


Por que Promises melhoraram o código?

Comparado a muitos callbacks aninhados, Promises trouxeram:

  • fluxo mais legível
  • tratamento de erro mais organizado
  • encadeamento mais claro

Elas também abriram caminho para async/await, que você verá na próxima lição.


Resumo da lição

  • Promise representa um resultado futuro de operação assíncrona.
  • estados: pending, fulfilled, rejected.
  • then trata sucesso, catch trata erro, finally executa sempre.
  • Promises ajudam a evitar código muito aninhado e melhoram a organização.