Skip to content
Latchkey

O que é uma Promise? Um placeholder para um valor futuro

Uma promise é um objeto que representa um valor que ainda não está pronto, representando o sucesso ou a falha eventual de uma operação assíncrona.

Uma promise (chamada de future em algumas linguagens) é um handle para um resultado que existirá depois. Em vez de passar um callback para ser invocado, uma função async retorna uma promise imediatamente. Você anexa handlers para quando ela tiver sucesso ou falhar, e a promise os notifica assim que a operação completa. Promises encadeiam de forma limpa e sustentam async/await.

Os estados de uma promise

Uma promise fica pending até a operação terminar, então é fulfilled com um valor ou rejected com um erro. Uma vez settled, seu estado nunca muda. Handlers anexados com then e catch rodam quando a promise settle, mesmo que isso já tenha acontecido.

Por que promises superam callbacks crus

  • Elas encadeiam com then em vez de aninhar, achatando fluxos async.
  • Erros propagam pela cadeia até um único catch.
  • Elas compõem: esperar por todas, ou fazer race de várias, com helpers embutidos.
  • Elas são a fundação sobre a qual async/await é construído.

Promises e async/await

Async/await é açúcar sobre promises. Uma função async retorna uma promise, e await pausa até uma promise settle, então cede seu valor ou lança seu erro. Entender promises é entender o que async/await faz por baixo.

Erros comuns com promises

Não retornar uma promise de uma cadeia quebra a ordenação. Esquecer um catch deixa rejeições não tratadas. Criar uma promise mas nunca dar await nela significa que seu trabalho e seus erros se perdem silenciosamente, uma fonte frequente de bugs sutis.

Um exemplo rápido

Chamar fetch(url).then(res => res.json()).catch(err => report(err)) retorna uma promise, faz o parse da resposta quando ela chega e roteia qualquer falha para um único error handler.

Promises no CI

Rejeições de promise não tratadas e promises sem await causam falhas de teste flaky e dependentes de ordem que vão e vêm em runners carregados. A Latchkey pode dar retry automático em falhas transitórias enquanto você rastreia a rejeição não tratada, para que uma única falha intermitente não bloqueie seu pipeline.

Principais conclusões

  • Uma promise representa um valor futuro que vai se cumprir com um resultado ou rejeitar com um erro.
  • Promises encadeiam e compõem, corrigindo o aninhamento e o tratamento de erros de callbacks crus.
  • Async/await é construído sobre promises; rejeições não tratadas causam testes flaky.

Guias relacionados