JavaScript assíncrono é um inferno

Image for post
Image for post
Image for post
Image for post

A forma como o JavaScript lê o código é uma realidade e não temos como fugir disso, é assíncrono e ponto final.

E as formas de lidar com isso são: callbacks, promises, generators e observables.

Não vou tratar de generators aqui.

Callback é quando você passa por parâmetro a função que vai ser executada quando o processo assíncrono terminar.

Promise é uma pattern genérica mas que possui uma implementação pronta em JavaScript, que retorna um objeto que executam as funções que passadas pelo método `then`

Exemplos de callback:

Veja no exemplo quando esse modelo vira um inferno, são múltiplas closures blocos de função que não terminam, variáveis com mesmo nome que se sobrepõem, e por último, caso a função escale será criado uma instância de função para cada chamada de callback.

Para isso é indicado usar Promise, veja um exemplo:

Mas aí você veja o último exemplo, não te lembra alguma coisa que começa com PH e termina com P (estruturado)?

E onde fica o aquela coisa bacanuda de funcional ?

Tive um papo recentemente sobre isso, e meu entendimento era de que muito disso passa por uma questão de estilo de programação, e o JavaScript com sua característica de multi-paradigma, gera esses discussões sobre melhor forma.

Mas não é tudo existem limitações razoáveis para se ver em cada formato.

Usando callback existe o risco de overhead, de complexidade, shadowing entre outros riscos, mas se é do estilo escrever o código alguns cuidados devem ser tomados, lembrando que programação funcional tudo é uma função.

Ou quando usamos promises ou async//await, o ponto de atenção é você não encher de await fazendo seu código um bloco estruturado, assincronia é bom e devemos utilizar-la.

O plus é que não precisamos trabalhar apenas com a pattern Promise no JS, existe uma outra forma de trabalho utilizando Observables, ou seja, a lib RXJS, segue um exemplo.

Veja também um exemplo aqui https://github.com/arielpchara/rxjs-react

Mas para resumir não existe uma forma maravilhosa de se resolver as coisas, entenda qual é o propósito do seu código e equalize com a forma que você melhor sabe utilizar.

Originally published at https://medium.com on November 12, 2020.

Impulsionar pessoas para inovar o mundo

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store