-
Você está comprando
um produto na Amazon
-
e, ao finalizar essa compra,
-
esse produto
vai para a separação.
-
Enquanto ele está
em separação,
-
você pode comprar outros produtos
e realizar outros pedidos.
-
Isso é uma visão de usuário.
E como desenvolvedor?
-
No modo desenvolvedor,
-
utilizamos duas sintaxes
muito poderosas:
-
o "async" e o "await".
-
Pensando no exemplo
da Amazon,
-
o "async" é quando
você finaliza o pedido.
-
Já o "await" é a espera
da separação desse pedido.
-
Enquanto isso,
você pode comprar outras coisas,
-
pode colocar outros
produtos no carrinho
-
e até mesmo comprar
o mesmo produto,
-
sem atrapalhar o pedido
que já está em andamento.
-
Isso é uma forma de esperar
outras requisições serem executadas.
-
Vamos colocar em prática
os conceitos de "async" e "await".
-
Nesse exemplo,
vamos aplicar uma lista
-
na qual eu consigo
trazer clientes inativos
-
e quando foi a última
compra que eles fizeram.
-
Vamos ao código?
-
Na estrutura do código,
-
temos aqui o nosso HTML
chamando o script,
-
temos aqui o código do script
já pronto que está no seu material,
-
e um arquivo novo,
que é um JSON,
-
com os dados dos clientes
que eu preciso trazer,
-
que estão inativos,
e quando foi a última compra deles.
-
Vou explicar linha por linha
para que vocês possam entender.
-
Bem, vamos começar
pelo script.
-
Primeiro, é criada
uma função "listaDados",
-
mas, antes, eu coloco
a palavra "async",
-
porque esta função vai executar
de forma assíncrona.
-
Com isso, quando essa função
começar a ser executada,
-
ela não terá problema
em executar outras operações.
-
Na segunda linha,
nós temos a requisição.
-
Então, por exemplo: criei uma
variável chamada "response",
-
que vai ter a outra palavra
chamada "await".
-
Nesse caso aqui,
ele vai esperar.
-
Esperar o quê?
-
Esse método "fetch" que vai
até o arquivo "dados.json",
-
que é exatamente
esse arquivo aqui.
-
Aqui também poderia ser
uma requisição HTTP
-
como placeholder,
-
que está no material de vocês
como requisição.
-
Aqui, eu estou dando exemplo
como arquivo, por que?
-
O "async" lê arquivos
ou requisições HTTP.
-
No material de vocês já tem
um exemplo como requisição,
-
e aqui estou fazendo um exemplo
prático lendo um arquivo.
-
Então, nesse exemplo,
o "await" vai esperar
-
o "fetch" ir até o "dados.json"
ler todos esses dados aqui.
-
Ele traz, joga dentro
dessa variável aqui
-
que eu estou criando,
chamada "dados",
-
Então, esse "response"...
-
Perceba que esse "response"
recebe o arquivo "dados",
-
e vou colocar dentro
de uma variável chamada "dados".
-
Por quê?
-
A web só consegue
ler arquivos JSON.
-
Então, tudo que nós
temos aqui por trás
-
do que o seu navegador
pode entender é arquivo JSON.
-
Então, nessa função,
eu fui lá, peguei os dados,
-
e joguei dentro de uma variável
chamada "dados",
-
e vou retornar esse "dados".
-
Vou retornar tudo o que estiver
dentro desse arquivo aqui.
-
Ótimo.
-
Para isso acontecer,
eu tenho que fazer uma promessa.
-
Chamamos isso de "promise".
-
E o que é uma promessa?
-
É uma garantia de que, se os dados
forem lidos corretamente,
-
vai dar certo,
vai mostrar tudo bonitinho.
-
Se não, ele vai
apresentar um erro.
-
Então, vamos lá.
-
Eu trago aqui a "listaDados",
que é o nome da minha função,
-
e aí, aqui, eu coloco ".then".
-
Então, "dados"...
-
Aqui contém todos
aqueles arquivos.
-
"dados",
faço um "console.log",
-
e apresento todos os dados
aqui na minha tela.
-
Se não acontecer isso,
-
ele vai me trazer
uma mensagem de erro.
-
Ou seja, se os dados
estiverem corrompidos
-
ou não estiverem
no formato correto,
-
ele vai entrar aqui nesse "catch"
e vai apresentar como erro.
-
Esse é um exemplo de criar
uma função com "async" e "await".
-
E o que vai acontecer?
-
Quando ele estiver
com esse erro,
-
ele vai trazer o erro bonitinho,
sem problemas de travar a página.
-
Em um modo síncrono,
ele travava a página.
-
Se der erro, ele vai travar a página,
e não vai deixar você sair dela.
-
Como nós estamos
falando de um assíncrono,
-
eu consigo manipular a página,
-
limpar ou resetar,
iniciar a função novamente.
-
Então, vamos lá.
-
Bem pessoal, percebam que,
aqui, ele deu um erro.
-
Ele está falando que não
pode acessar o "dados"
-
antes de ser inicializado.
-
Então, ele já entrou
no "catch" direto,
-
já é um exemplo do erro,
-
mas isso não fez com que
a aplicação parasse, travasse.
-
O erro está aqui:
-
é que eu não estou passando
dentro de aspas simples.
-
Olha lá, agora ele me trouxe
os dados do cliente,
-
a última compra dele
e se ele está ativo ou não.
-
"false", ele está inativo,
"true", ele está ativo.
-
Então, nós temos aqui
-
dois clientes ativos
e três clientes inativos.
-
E olha as datas em que
eles fizeram a última compra.
-
Por exemplo: esse aqui
foi em 10/02/2020.
-
Isso te ajuda a poder, depois,
criar uma outra função
-
que mande mensagem
para esses clientes
-
para que eles possam
voltar a comprar.
-
Esse é um exemplo
de "async" e "await".
-
Agora que você já sabe
os conceitos de "async" e "await",
-
convido você a ter
um olhar de usuário
-
e, ao mesmo tempo, de dev,
-
trazendo o seu mundo real
para o código
-
ao olhar um aplicativo.
-
Onde está o "await"?
Onde está o "async"?
-
E como aplicá-los?