SlideShare uma empresa Scribd logo
1 de 84
Trabalhando de forma
assíncrona com
javascript
hello!
Lucas Anderson Lima
Desenvolvedor Front End na Wooza
23 anos de idade - Baiano
2
@LuAnderson
“
Tudo é executado em paralelo,
exceto o seu código.
3
Mikito Takada
JavaScript
4
1.
Beginners
Síncrona x Assíncrona
5
Síncrona x Assíncrona
6
É sequencial, logo segue a
ordem em que as instruções
aparecem no código fonte do
programa.
Você tende a esperar o final
de uma execução para iniciar
outra.
Síncrona x Assíncrona
7
Tarefas que poderão ser
executadas sem interferir no
fluxo principal de execução do
código.
Você pode disparar uma série
dessas tarefas sem precisar
esperar que cada uma se
complete para prosseguir.
É sequencial, logo segue a
ordem em que as instruções
aparecem no código fonte do
programa.
Você tende a esperar o final
de uma execução para iniciar
outra.
Síncrona
8
Síncrona
9
Assíncrona
Funções Assíncrona
10
Funções Assíncrona
11
● Eventos do DOM
Funções Assíncrona
12
● Eventos do DOM
● Timers
Funções Assíncrona
13
● Eventos do DOM
● Timers
● Mutation Observers
Funções Assíncrona
14
● Eventos do DOM
● Timers
● Mutation Observers
● Callbacks e closures
Funções Assíncrona
15
● Eventos do DOM
● Timers
● Mutation Observers
● Callbacks e closures
● Promise
Entendendo a engine JS
16
“O próprio JavaScript nunca teve nenhuma noção direta de
assincronia embutida nele.”
Entendendo a engine JS
17
● Ambiente de Hospedagem (Navegador ou NodeJS);
“O próprio JavaScript nunca teve nenhuma noção direta de
assincronia embutida nele.”
Entendendo a engine JS
18
● Ambiente de Hospedagem (Navegador ou NodeJS);
● Cada dispositivo uma hospedagem diferente;
“O próprio JavaScript nunca teve nenhuma noção direta de
assincronia embutida nele.”
Entendendo a engine JS
19
● Ambiente de Hospedagem (Navegador ou NodeJS);
● Cada dispositivo uma hospedagem diferente;
● Denominador comum é chamado de Event Loop.
“O próprio JavaScript nunca teve nenhuma noção direta de
assincronia embutida nele.”
Entendendo a engine JS
20
● Ambiente de Hospedagem (Navegador ou NodeJS);
● Cada dispositivo uma hospedagem diferente;
● Denominador comum é chamado de Event Loop.
“O próprio JavaScript nunca teve nenhuma noção direta de
assincronia embutida nele.”
Event Loop
21
2.
Entendo melhor o funcionamento do JS
O que faz o Event Loop?
22
● Lida com a execução de vários fragmentos de seu programa ao
longo do tempo;
(Engine JS)
O que faz o Event Loop?
23
● Lida com a execução de vários fragmentos de seu programa ao
longo do tempo;
● ‘É uma agenda os eventos’;
(Engine JS)
O que faz o Event Loop?
24
● Lida com a execução de vários fragmentos de seu programa ao
longo do tempo;
● ‘É uma agenda os eventos’;
● Monitora a pilha e a chamada e a fila de retorno.
(Engine JS)
Analisando ‘tick’ no event loop
25
Analisando ‘tick’ no event loop
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Callbacks
44
3.
É o padrão assíncrono mais fundamental na linguagem JS
Callbacks
45
Callbacks
46
Callbacks
47
Callbacks + Condicionais
48
Callbacks Hell
49
50
Promise
51
4.
Objeto usado para Processamento Assíncrono
Promises
52
Representa um valor que pode estar disponível agora, no futuro ou
nunca;
Promises
53
Representa um valor que pode estar disponível agora, no futuro ou
nunca;
Promises - Estados
54
Promises - Estados
● Pedding (Pendente): Estado inicial, que não foi realizada nem rejeitada.
55
Promises - Estados
● Pedding (Pendente): Estado inicial, que não foi realizada nem rejeitada.
● Fulfilled (Realizada): Sucesso na operação.
56
Promises - Estados
● Pedding (Pendente): Estado inicial, que não foi realizada nem rejeitada.
● Fulfilled (Realizada): Sucesso na operação.
● Rejected (Rejeitado): Falha na operação.
57
Promises - Estados
● Pedding (Pendente): Estado inicial, que não foi realizada nem rejeitada.
● Fulfilled (Realizada): Sucesso na operação.
● Rejected (Rejeitado): Falha na operação.
● Settled (Estabelecida): Que foi realizada ou rejeitada.
58
59
Promises - Principais Funções
Resolve
Retorna um objeto
‘Promise’ que foi
resolvido com um dado
valor.
60
Promises - Principais Funções
Resolve
Retorna um objeto
‘Promise’ que foi
resolvido com um dado
valor.
Reject
Retorna um objeto que
foi rejeitado.
61
Promises - Principais Funções
Resolve
Retorna um objeto
‘Promise’ que foi
resolvido com um dado
valor.
Reject
Retorna um objeto que
foi rejeitado.
Catch
Adiciona um callback
que trata rejeição para
a promise.
62
Promises - Principais Funções
ES8
63
5.
Async / Await
Async
64
Async
65
Async
66
● É utilizado para declarar que uma função é async
Async
67
● É utilizado para declarar que uma função é async
● AsyncFunction object trabalha da mesma forma que uma Promise
Async
68
● É utilizado para declarar que uma função é async
● AsyncFunction object trabalha da mesma forma que uma Promise
● Callbacks | Resolves e Reject --- await
Await
69
Await
70
A expressão await faz a execução de uma função async pausar, aguardando o
retorno da Promise.
Await
71
A expressão await faz a execução de uma função async pausar, aguardando o
retorno da Promise.
Ela pode ser usado apenas dentro de uma async function.
Async/Await
72
73
Limpeza de código: Callback x Async
74
Limpeza de código: Callback x Async
75
Callback
Limpeza de código: Callback x Async
76
Callback
Async
Manipulação de Erros: Promises x Async
77
78
Manipulação de Erros: Promises x Async
79
Manipulação de Erros: Promises x Async
Await: Suporte
81
Callback
Promise
Async/Await
82
Tecnicamente, não há um jeito “errado”;
Use cada abordagem da maneira certa, para o problema certo
e seja assincronamente feliz!
Links
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/await
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/funcoes_assincronas
https://braziljs.org/blog/promises-no-javascript/
83
@LuAnderson
Perguntas?
84

Mais conteúdo relacionado

Mais procurados

Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Ricardo Longa
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Loiane Groner
 
Angular Extreme Performance
Angular  Extreme PerformanceAngular  Extreme Performance
Angular Extreme PerformanceGustavo Costa
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidRicardo Longa
 
Ruby para testers III - Selenium
Ruby para testers III - SeleniumRuby para testers III - Selenium
Ruby para testers III - SeleniumTestRock!
 
JS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em ReduxJS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em ReduxiMasters
 
Angular + Redux (ngRx)
Angular + Redux (ngRx)Angular + Redux (ngRx)
Angular + Redux (ngRx)Loiane Groner
 

Mais procurados (8)

Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)
 
Angular Extreme Performance
Angular  Extreme PerformanceAngular  Extreme Performance
Angular Extreme Performance
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
Ruby para testers III - Selenium
Ruby para testers III - SeleniumRuby para testers III - Selenium
Ruby para testers III - Selenium
 
JS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em ReduxJS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em Redux
 
Angular + Redux (ngRx)
Angular + Redux (ngRx)Angular + Redux (ngRx)
Angular + Redux (ngRx)
 

Semelhante a Trabalhando de Forma Assíncrona com JavaScript

Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2William Felipe
 
Angular.JS - Estado Atual
Angular.JS - Estado AtualAngular.JS - Estado Atual
Angular.JS - Estado AtualGustavo Costa
 
Usando QUnit para testes unitários em JavaScript
Usando QUnit para testes unitários em JavaScriptUsando QUnit para testes unitários em JavaScript
Usando QUnit para testes unitários em JavaScriptZigotto Tecnologia
 
Codando Assíncrono com Coroutines
Codando Assíncrono com CoroutinesCodando Assíncrono com Coroutines
Codando Assíncrono com CoroutinesArildo Borges Jr
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidAdriano Rocha
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
AutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyAutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyFausto Siqueira
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JSNàtali Cabral
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Claudinei Brito Junior
 
Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015talkitbr
 
Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best PracticesKaroline Leite
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSRodrigo Urubatan
 
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
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Felipe Silveira
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao androidMessias Batista
 

Semelhante a Trabalhando de Forma Assíncrona com JavaScript (20)

Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2
 
Angular.JS - Estado Atual
Angular.JS - Estado AtualAngular.JS - Estado Atual
Angular.JS - Estado Atual
 
Usando QUnit para testes unitários em JavaScript
Usando QUnit para testes unitários em JavaScriptUsando QUnit para testes unitários em JavaScript
Usando QUnit para testes unitários em JavaScript
 
Codando Assíncrono com Coroutines
Codando Assíncrono com CoroutinesCodando Assíncrono com Coroutines
Codando Assíncrono com Coroutines
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
AutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyAutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic Academy
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
 
Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
New Relic Insights
New Relic InsightsNew Relic Insights
New Relic Insights
 
Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best Practices
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSS
 
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
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
 
Orquestração com Mcollective
Orquestração com McollectiveOrquestração com Mcollective
Orquestração com Mcollective
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android
 

Trabalhando de Forma Assíncrona com JavaScript

Notas do Editor

  1. RE
  2. RE