SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Lidando com operações
assíncronas no Redux com
Redux-saga
Hugo Bessa
Quem sou eu
● Hugo Bessa
○ Recife
○ Estudante de Ciência da Computação - UPE (ainda)
○ Entusiasta de SPAs e PWAs
○ Já ouvi todas as piadas que você puder imaginar com
Bessa
○ 7 anos como desenvolvedor, 5 com django, 3 com SPA
@hugoabessa
github.com/hugobessa
● Por que usar Redux?
Vamos falar um pouco sobre Redux
Fluxo da informação - React + Redux
Fluxo da informação - React + Redux
Estado e ações globais
Menos argumentos via props
Menos callbacks,
Comunicação mais flat
Requisições
Assíncronas
Chamando as promises fora do Redux
Chamando as promises fora do Redux
Chamando as promises fora do Redux
Utilizando middlewares feitos pra isso
Redux-saga
Informação concentrada em um lugar e de forma sucinta
Perfeitamente integrado com redux
Fácil de testar
Focado no tratamento de erros
mas como se chegou a esse design?
Saga é um padrão de software (design pattern) criado para
gerenciamento de efeitos colaterais. Esse padrão é focado em
garantir confiabilidade, e é muito utilizado para implementar a
comunicação entre serviços.
Sagas Pattern
Quem usa Sagas Pattern e pra que?
Halo 4 e Twitter, para garantir que falhas não irão deixar
dados inconsistentes em seus banco de dados
distribuídos.
Entendendo o
Redux-saga
Generator Functions e Iterators
É uma função que ao ser chamada retorna um objeto (iterator). E aí
toda vez que você chama o método next desse objeto (gen.next()) o
escopo do generator é executado até o próximo yield, retornando o
resultado da expressão que ele antecede.
O básico
take(actionType): payload
O take aguarda uma action do tipo solicitado. Isto é, o generator não passa
para a próxima linha até que seja dado dispatch numa action desse tipo do
redux.
O básico
call(function, ...arguments)
O call chama uma função assícrona, aguarda o resultado dela ser definido para
continuar e retorna-o.
A espera não é ociosa, o middleware supende o generator enquanto a
promise não termina.
O básico
put(action, payload):void
Faz dispatch de uma action passando um payload.
O básico
Não funciona!
Pesquisas rápidas consecutivas, serão ignoradas.
Apenas a primeira vai ser executada.
fork/cancel
fork(saga, ...args): task
O fork chama uma saga assincronamente, e não se preocupando com o
resultado. Ela retorna um objeto do tipo task, que serve, por exemplo, para
caso você queira cancelar uma fork que já tenha sido chamado. Se uma task
filha dá erro, o erro propaga para o pai.
cancel(task)
Cancela uma task que esteja rodando, ou não faz nada caso já tenha
terminado
takeEvery e takeLatest
takeEvery(actionType, saga):void
O takeEvery, ao receber uma requisição, chama uma saga assincronamente e
já fica disponível imediatamente para receber a action novamente. Então,
sempre que uma action do tipo especificado ocorrer, a saga vai ser acionada,
independente da anterior ter sido terminada ou não
takeEvery e takeLatest
takeLatest(actionType, saga):void
O takeLatest parece muito o takeEvery, a única diferença é que ele
ignora/cancela as execuções incompletas de açes, considerando apenas a
última.
Combinadores de Effects
race({key: saga}): {key: sagaResult}
A race inicia uma corrida entre duas ou mais calls, e retorna um array com {key:
sagaResult} onde o único resultado preenchido será da chamada que
terminou primeiro, e todos os outros serão undefined.
Combinadores de Effects
all([effects]): [effectResults]
Só termina quando o todos os effects terminam, e o array está totalmente
preenchido.
Combinadores de Effects
Slides:
bit.ly/bessa-redux-saga
Twitter: https://twitter.com/hugoabessa
Github: https://github.com/hugobessa
Email: hugo@vinta.com.br

Contenu connexe

Tendances

Fazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFabio Telles Rodriguez
 
Oficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar ConfiguraçõesOficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar ConfiguraçõesJose Augusto Carvalho
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppetElton Simões
 

Tendances (9)

Fazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da porta
 
PostgreSQL Rock Star
PostgreSQL Rock StarPostgreSQL Rock Star
PostgreSQL Rock Star
 
Puppet vs ansible
Puppet vs ansiblePuppet vs ansible
Puppet vs ansible
 
Orquestração com Mcollective
Orquestração com McollectiveOrquestração com Mcollective
Orquestração com Mcollective
 
Trabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQLTrabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQL
 
Oficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar ConfiguraçõesOficina Puppet - Aprenda a Gerenciar Configurações
Oficina Puppet - Aprenda a Gerenciar Configurações
 
Fail overpfsense
Fail overpfsenseFail overpfsense
Fail overpfsense
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppet
 

Similaire à Lidando com operações assíncronas no redux com redux saga

Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresqlGerdan Santos
 
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Davy Alvarenga Machado
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsTestes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsLocaweb
 
Sábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScriptSábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScriptJulio Greff
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - FunctionsWesley Lemos
 
Menos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaMenos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaRodrigo Vieira
 
Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Huge
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareFelipe
 
Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)Huge
 
Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best PracticesKaroline Leite
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Renato Groff
 
Trabalhando de Forma Assíncrona com JavaScript
Trabalhando de Forma Assíncrona com JavaScriptTrabalhando de Forma Assíncrona com JavaScript
Trabalhando de Forma Assíncrona com JavaScriptLucas Anderson
 
Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...
Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...
Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...Giovanni Bassi
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloIsmael
 

Similaire à Lidando com operações assíncronas no redux com redux saga (20)

Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresql
 
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
 
Síncrono vs Assíncrono
Síncrono vs AssíncronoSíncrono vs Assíncrono
Síncrono vs Assíncrono
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsTestes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJs
 
Sábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScriptSábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScript
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
Menos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaMenos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na prática
 
Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)
 
Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best Practices
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015
 
Durable functionsmvp conf2020
Durable functionsmvp conf2020Durable functionsmvp conf2020
Durable functionsmvp conf2020
 
Trabalhando de Forma Assíncrona com JavaScript
Trabalhando de Forma Assíncrona com JavaScriptTrabalhando de Forma Assíncrona com JavaScript
Trabalhando de Forma Assíncrona com JavaScript
 
Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...
Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...
Nunca fora do ar: como manter uma aplicação sempre disponível com Continuous ...
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Aop Aspect J 1.5.4
Aop Aspect J 1.5.4Aop Aspect J 1.5.4
Aop Aspect J 1.5.4
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São Paulo
 

Lidando com operações assíncronas no redux com redux saga