RxJs — Uma nova maneira de tratar assincronia

RxJs — Uma nova maneira de tratar assincronia

async é algo que já é parte do cotidiano de um programador JS, como ele é uma linguagem assíncrona muitos já se acostumaram com essa maneira de programar, o nosso querido EcmaScript já oferece alguns recursos para tratar isso como, Promises, Generators e o Async/Await. Porém hoje quero falar de uma nova maneira, o Reactive X, especificamente a implementação para JS.

Primeiro é importante falar sobre a Programação Reativa, que é uma maneira declarativa de tratar Data Streams. Mas o que isso quer dizer ? Vamos abstrair um pouco mais esse conceito, pense em um canal do YouTube, esse canal publica videos e existem inscritos que querem obter esse conteúdo então ao se inscrever em um canal o inscrito irá receber esse conteúdo até que uma das 2 coisas aconteçam, o canal pare de publicar videos ou o inscrito remover essa inscrição. Resumindo o canal do YouTube é um Data Stream nesse exemplo, e a programação reativa basicamente é uma maneira de lidar com todo esse fluxo de inscritos e emissão de conteúdo.

Falando um pouco mais agora sobre como o Reactive X nos auxilia a implementar a programação reativa, ele combina dois patterns que estão no GoF o Iterator e o Observer com alguns conceitos de programação funcional. Ele usa o Observer Pattern para obter dados ou eventos e além disso oferece vários operadores que permitem que você componha os streams de uma maneira declarativa.

Observable é o mais usado dos recursos do RxJs, ele representa uma coleção de dados ou eventos futuros, para tratarmos os dados emitidos por ele temos o Observer, onde definimos o que iremos fazer quando vier o próximo dado, quando der algum erro e quando acabar o stream. Além disso temos a Subscription que representa a execução do Observable e é utilizada para cancelar o mesmo, já que ele é como uma função e só será executado quando tiver um subscribe e não ao definir apenas o código.

O Reactive X oferece mais um recurso que é o Subject, ele é a junção de um Observable com um Observer. Ele emite o mesmo conteúdo para todos os inscritos, com ele você consegue controlar quando emitir o próximo conteúdo e assim que for emitido todos os seus subscribers irão recebe-lo. Possui vários tipos como o ReplaySubjectBehaviorSubject e o AsyncSubject.

You can build your app as one big observable… but please don’t

Essa frase foi dita pelo Ben Lesh, que é o principal mantenedor no RxJs e engenheiro no Google, e basicamente quer dizer que temos que sempre tomar cuidado para não usar esses recursos de uma maneira exagerada, temos que sempre lembrar que outros pessoas irão ler o nosso código, e elas tem que entender ele para poder dar suporte, porque ao trabalhar com eventos pode ficar um pouco confuso principalmente no começo, ler o código e entender como o stream está definido.

Então a minha dica final é comece a usar ele, porque só conseguimos entender realmente esses conceitos usando eles, combinando diferentes eventos, tratando diferentes cenários. É muito legal ver a evolução do seu código com o tempo, conforme você vai aprendendo a utilizar melhor os operadores o seu código vai melhorando, então treine, tente re-fatorar os seus códigos depois de um tempo e tente ensinar para outras pessoas também porque assim você aprende mais ainda!

Basicamente é isso que tenho pra hoje, até a próxima !