Entendendo Promises de uma vez por todas

Lucas Santos
Training Center
Published in
19 min readApr 8, 2019

--

Créditos: fransciskim.com

Promises são um conceito essencial do JavaScript. Elas estão presentes em praticamente todo o ecossistema da linguagem.

Promises são um padrão de desenvolvimento que visam representar a conclusão de operações assíncronas. Elas não eram nativas do JavaScript até o ES6, quando houve uma implementação oficial na linguagem, antes delas, a maioria das funções usavam callbacks.

Neste artigo vamos estudar a fundo o que é uma Promise e como podemos entender seu funcionamento.

Vamos usar uma ferramenta muito legal chamado Promisees criada pelo Nicolás Bevacqua para podermos visualizar a execução de nossas Promises em tempo real de forma visual.

Antes de começar, queria deixar um disclaimer de que, apesar de saber que um artigo no Medium deveria ter mais ou menos 7 minutos para não ficar chato, este artigo é bem profundo e explicativo, então eu vou tentar colocar tudo o possível sobre Promises aqui para servir de guia para outros que possam estar procurando!

História das Promises

Promises remontam à década de 70 — como você pode ver neste artigo — e eram chamadas de futures, deferred ou delays. Pelo artigo, elas são definidas como:

Construtos usados para sincronizar a execução de um programa em linguagens de programação concorrentes. Eles descrevem um objeto que atua como um proxy para um resultado que é, inicialmente, desconhecido devido a sua computação não estar completa no momento da chamada.

De acordo com o que vemos na Internet, no JavaScript, as Promises fizeram sua primeira aparição em 2007 em uma biblioteca chamada MochiKit . Depois outras bibliotecas como o Dojo e o jQuery adotaram a mesma especificação pouco tempo depois.

Por fim, para padronizar todas as implementações, o grupo CommonJS escreveu a especificação chamada Promises/A+ que visava ditar todas as regras necessárias para definir o que era uma Promise e sua interoperabilidade com outros sistemas.

No caso do NodeJS, nas primeiras versões, o runtime já implementava nativamente…

--

--

Lucas Santos
Training Center

Brazilian Programmer, caught between the black screen and rock n' roll 🤘 — Senior software Engineer @ Klarna