[Música] fala Mestres beleza na aula de hoje nós vamos iniciar aqui no módulo de programação assíncrona né de cbexs de Promises a gente vai começar a entender melhor esse mundo aí porque é uma parte extremamente importante que nós temos no JavaScript a gente precisa entender porque a gente trabalha muito com isso né e a programação assíncrona nós temos diferentes casos aí onde ela é implementada onde a gente usa ela de fato e mas só que o exemplo mais comum que eu posso dar para vocês aqui é a comunicação entre sistemas entre cliente e servidor entre
servidores essa comunicação entre um programa e outro isso é feito de forma assíncrona então e quando a gente tá desenvolvendo por exemplo a gente tá fazendo um website ou um aplicativo a todo momento ex existem esse esses tipos de comunicações então é uma coisa que a gente trabalha ali com isso o tempo todo e aí é de suma importância que a gente Entenda como que isso funciona tá então a ideia de programação assíncrona vem do da dessa a gente vai fugir mais dessa ideia do código sequencial o que que é o código sequencial até hoje
a gente veem estudando aí e a gente tá aprendendo que o programa ele vem sendo executado de cima para baixo né a gente escreve as instruções as instruções elas vêm sendo executadas na ordem sequencial né síncrona que a gente definiu e a ideia de assíncrono é para quebrar isso né É É o oposto disso na verdade que o código ele não vai ser mais executado na ordem que a gente definiu Mas e as coisas podem acontecer em momentos diferentes Então vamos imaginar nesse caso aí da comunicação eu posso querer comunicar com o meu servidor de
backend para buscar os dados daquela minha página uma lista de produtos e aí enquanto ele faz a lista de produtos o meu programa ele não pode ficar parado lá esperando essa resposta meu programa ele tem que fazer outras coisas tem que processar outros dados o usuário ele tem que conseguir mexer no mouse né então o programa ele tem que continuar funcionando e e a ideia do assíncrono é isso que a gente vai disparar as coisas eu vou parar uma busca de produto eu vou disparar uma busca de dados do usuário eu vou disparar algumas outras
coisas e enquanto essas coisas estão sendo feitas ou enquanto a resposta não chega eu vou fazer outras coisas e a ideia da programação assíncrona é isso né Eh funciona dessa forma então nós temos né alguns exemplos de coisas assíncronas e aqui no próprio JavaScript já de de de forma Nativa que seria os timers né então nós temos aqui a função ó set time out o set time out ele como o nome fala né a gente vai definir um intervalo de tempo Onde o meu código Ele vai esperar aquele intervalo de tempo e depois ele vai
executar uma função então o primeiro parâmetro seria essa função e o segundo parâmetro esse timeout né que é o handler né e o timeout só que antes vamos falar aqui do de callback né a gente já falou de callback nos módulos onde a gente estava falando sobre map né map map for né quando a gentea tratando lá com os arrs mas eu revisar essa ide aqui e revisar ISO eu criar uma função pra gente entender isso aqui melhor então a ideia do callback é uma função que vai ser enviada como argumento para outra função vai
ser chamada e essa função que foi enviada como argumento ela vai ser invocada ela vai ser executada em um outro momento para por ela vai ser invocada pela função que que eu enviei ela como parâmetro né quando a gente começar a programar aqui isso aqui vai ficar mais claro então eu vou criar aqui a função de ler arquivo porque normalmente as operações normal de ler arquivo no no node elas são assíncronas né então querendo ou não isso aqui já vai ser também um exemplo que de algo que pode acontecer tá então a minha função que
lê arquivo ela vai receber uma callback como parâmetro tá essa callback a gente vai definir o que que ela é ainda mas a ideia aqui dentro da leitura de arquivo é que eu vou ter uma variável de conteúdo que vai armazenar o conteúdo do arquivo né e aqui eu eu teria de fato a leitura dos arquivos né então leitura o arquivo aí depois eu iria atribuir o conteúdo do arquivo ar e na variável né então eu teria aqui né em conteúdo conteúdo Opa conteúdo vai receber 1 2 3 que seria os dados do meu arquivo
que eu li né E aí eu vou verificar se foi enviada uma callback ou seja essa callback na verdade eh eu vamos vamos fazer que a callback ela vai ser requerida né Sempre ela ela vai ser enviada né não vai ser um parâmetro opcional então que eu vou fazer o seguinte eu vou eu verificaria né se existir o conteúdo eu executo a minha callback tá algo desse tipo e aí se não né se não se não existir conteúdo que significa que eu não consegui ler o arquivo eu posso jogar uma exceção né de falha na
leitura só pra gente ter um um um um pseudo pseudo um código aqui pra gente ter uma noção de como seria o fluxo tá então quando eu executar ou ler arquivo vou comentar esse set timeout vou chamar aqui ó ler arquivo E aí esse parâmetro dessa função vai ser essa essa callback E aí para ficar um pouco mais simples eu vou declarar o que que vai ser essa função que eu vou enviar como parâmetro então aqui eu vou criar a função callback Então vou chamar aqui function callback ela vai ser uma função que simplesmente faz
um console log ó console. log callback executado tá então essa função eu vou enviar ela como um argumento paraa função ler arquivo dessa forma aqui ó tá então a função ler arquivo vai receber essa outra função callback e aí se existir conteúdo ela vai Executar a minha função callback tá então basicamente é essa que é a ideia das callbacks né se eu executar isso aqui nós temos aqui ó callback executada então existia conteúdo né porque eu atribuí aqui e ele executou a minha função callback por dentro da função ler arquivo tá então eu estou executando
a função ler arquivo e enviando para ela a função callback e aí a função ler arquivo né no corpo dela ela vai Executar a função C para mim então essa ideia de callback a gente usa muito sempre que a gente tá trabalhando com algo assíncrono e e no nesse exemplo aqui do Set timeout a gente também vai usar uma callback e antes da gente vir aqui pro set timeout uma forma de simplificar né a Essas funções callbacks porque na maioria dos casos elas são funções anônimas o que que eu posso fazer ao invés de eu
declarar a função callback antes para passar ela como argumento eu já posso declarar ela aqui dentro dos parênteses né já quando eu executo a função ler arquivo então eu poderia mover isso para cá ó e a função ela pode ser uma função anônima né ela não precisa ter nome então eu posso e encurtar o código né e simplificar para essa forma se eu quiser simplificar mais eu posso tirar o function e usar uma errow function né que é o outro tipo de função que nós nós temos aí então ler Arquivo ele vai receber essa função
a gente vai enviar ess essa função como argumento que vai ser executada né aqui dentro do ler arquivo né Vamos executar isso aqui para ver se tá funcionando e ó lá callback executada tá Então essa é a ideia das callbacks e aqui no set timeout vai ser desse tipo eu vou passar né como primeiro argumento uma função e o segundo argumento é o time Então vamos passar por exemplo 2000 milissegundos tá esse valor aqui é em milissegundos então depois de 2000 milissegundos ou seja depois de 2 segundos ele vai executar essa essa função e aqui
eu posso fazer ó console. log função do timeout Eu posso salvar e executar o nosso código quando eu executo temos aqui callback executado e depois de 2 segundos ele printa aqui no console função do timeout então a gente consegue né eh através do timeout fazer essa ideia de iniciar de fato na verdade esse timeout aqui foi o exemplo inicial de programação assíncrona E por que que isso é um exemplo de programação assíncrona porque depois do Set timeout eu posso ter aqui ó console. log programa Continua em ex Continua em execução e quando eu executo né
ó lá ó callback executada olha só que curioso né olha a ordem vamos prestar atenção aqui na ordem dos logs tá porque eu tenho aqui ó a CBC foi executada que é esse exemplo aqui do ler arquivo né que é o o que a gente a explicação que eu dei antes depois eu tenho programa Continua em execução que é essa parte aqui de baixo depois do Set timeout então na ordem que o que o arquivo JavaScript foi executado né eu declarei a função ler arquivo executei ela depois eu defini o timeout de 2 segundos e
depois eu vim pro meu console log então eu defini o timeout só que como ele não execut no momento que eu defino né só depois de 2 segundos ele é assíncrono ele já passou pra frente e veio executar aqui o meu console log Então o meu programa ele continuou em execução ele passou pelo set time out ele disparou o set time out e nesses 2 segundos e continuou a sua execução normalmente então se eu tivesse outras instruções aqui outras coisas o meu programa ele ia continuar fazendo aquilo e quando desce o tempo quando dá o
tempo do timeout que é os dois segundos ele vai fazer esse print aqui né que na verdade ele vai Executar a função que a gente enviou como callback que no caso ela só faz um console log Tá mas a ideia da programação assíncrona é isso é que a gente declara as coisas só que não necessariamente aquela O código vai ficar parado o programa Vai ficar parado esperando aquela função executar ele ele vai passar pra frente e vai fazer outras coisas enquanto aquela função executa tá e a ideia é isso tá a ideia das cbexs É
essa a programação assíncrona também eu acho que agora já tá mais claro o que que é e a ideia de callback ela é uma ideia muito boa né isso ajuda a gente bastante eh a leitura do código ela até facilita também a gente quando a gente entende o conceito né Fica um pouco mais claro só que isso quando isso escala muito a gente começa a ficar com problemas porque as callbacks elas podem ser alinhadas né E essa ideia de alinhamento queer ter uma coisa dentro do outro que puxa outro e vai o problema quando quando
o programa cresce muito isso aí vira o famoso callback Hell né que é um monte de funções callbacks uma dentro da outra uma chama a outra e o negócio vai indo indo indo e que vira de fato o inferno né que é o o o próprio nome callback Hell se refere então callback é muito importante ajuda a gente bastante é um conceito que nós temos que ter em mente só que a gente tem também que usar com cuidado para que a gente não acabe transformando o nosso programa em algo muito difícil dar manutenção muito difícil
de lei de entender o que que tá acontecendo Beleza então para essa aula aqui é isso eu espero que eu tenha ajudado qualquer dúvida pode deixar um comentário aí logo abaixo e é isso aí muito obrigado e até a próxima [Música]