Vídeos

Callbacks, Promises e Async-Await no Node.js

Thamyres Nunes
Escrito por Thamyres Nunes em 06/05/2021

Olá, tudo bem? O vídeo de hoje é um trecho de uma aula minha em um dos meus cursos de Node.js. Nela, falo sobre o porquê, as diferenças e como usar callbacks, Promises e Async/Await, três recursos existentes no JavaScript para lidar com chamadas assíncronas. Se gostou da lição, não esqueça de se inscrever no canal e deixar o seu like

– Meus cursos: https://www.luiztools.com.br/meus-cursos?utm_source=youtube&utm_medium=link&utm_campaign=cursos&utm_content=promises

– Meus livros: https://www.luiztools.com.br/meus-livros?utm_source=youtube&utm_medium=link&utm_campaign=livros&utm_content=promises

Me siga nas redes sociais: https://about.me/luiztools

Um abraço e sucesso.

Prof. Luiz

o Olá tudo bem Aqui é o Luiz e no vídeo
de hoje vou falar sobre callbex Promises
e assim que leite na verdade é um trecho
retirado de uma aula minha de um curso
completo que eu tenho que mais no final
vai dar mais algumas informações mas eu
tenho certeza que assim único trecho vai
te ajudar bastante se você tiver com
dúvidas me Candeias diferenças EA
utilização de cada um então bora para
aula 1
e o que é que eu queria trazer para
vocês agora né Outro ponto que gera
bastante dúvida não é bastante conclusão
é a parte de execução Donald por tomou
de Ele trabalha de maneira assíncrona o
padrão Aí a maioria das linguagens de
programação ela trabalha de forma
síncrona que que a forma circular né na
ordem que eu escrevo o código é a ordem
que executa e.
o node.js ele foi criado justamente o
fato de estar alguns vídeos notórios não
vou ser repetitiva aqui mas ele foi
criado justamente para tratar a
deficiência que alguns sistemas tinham
de que eu ficava pendurado no processo
esperando um retorno e não executavam as
minhas de baixo até chegar aquele meu
retorno isso gerava gargalos performance
então hoje ele foi criado em mente para
se eu tiver alguma tarefa bokante não é
uma tarefa que demore muito tempo né
aqui que acesso um recurso lento por
exemplo uma pena web o disco na almoço
orçamento mais pesado e isso não
bloqueia a execução do meu programa e o
programa 5 a vida dele quando assim tem
que estar executando que é mais pesado
com ele terminar que ele me avise de
alguma forma e a este me avisaram de
alguma forma que gera muita dúvida no
pessoal muitas vezes né então ao longo
do tempo se criou algum
os mesmos para criar este aviso de
retorno o primeiro mecanismo foi o
callback depois você criou as planícies
e depois de criou async await for na
verdade gente teve aí uma revolução na
forma de programar de maneira assíncrona
com jerryscript eu vou pegar aqui um
arquivo ou criar um arquivo qualquer tô
aqui com prata aberto mas eu não vou não
vou mexer no projeto falou que daqui a
um ex
a JS só para o presente ficar
É sim
bom então por exemplo se eu tenho na um
código que ele é com x igual a zero
console log in
é isso aqui não tem nada de bloqueante
vai executar aí tá Dá um zoom aqui
e vai Executar a linha um vai carregar
uma constante valor zero e na linha de
baixo vai escrever essa variável no
console então aqui operações super
rápido de fazer tem mistério nenhum o
problema é é que já confusão pessoal
quando eu faço alguma chamada que é
lenta demora porque depende de um
recurso externo como por exemplo para
lidar com arquivos tá bom carregar aqui
a biblioteca do Alce tem Peppa eu tô com
eu vou carregar a moda antiga aqui
porque eu abrir um arquivo já existente
botar aqui com fs.com reparei mesmo
e a porta funciona também com Import tá
o carrinho fsfs ao módulo para sistema
de arquivos aos tem mexer com um sistema
de arquivos é ler e escrever do
disco-lee escrevendo disco das coisas
que um computador pode fazer tá no top
das mais lentas lá mandar pacote pela
rede ele escrevendo disco somente
escrever é o tem mais lento no
computador então quando eu quero por
exemplo da uffs. Hight One
e o mais fácil para escrever no arquivo
esta operação aqui ela é uma operação
lenta porque ela vai pegar os bytes que
eu enviar e salvar num arquivo que eu
vou dar um nome aqui eu parâmetro ou por
exemplo eu quero salvar né hum
o meu X por exemplo ela usar que eu
tentei de Strings ou salvá-lo strengh
com x no arquivo teste.txt na raiz do
meu projeto a como é que você quer a
raiz que eu não botei caminho aqui mas
não é muito desculpa que explicar o fs1
e quando eu mando escrever um arquivo o
tecnólogo de ver cara ele quer ir no
disco de Escher lento eu vou mandar essa
Ted é a tragédia O que é um outro fluxo
execução eu vou mandar esse ponto
execução para ser feito em background
ó e vou seguir minha vida então ele vai
começar a fazer essa escrita no arquivo
e já vai imprimir no console em
e muito provavelmente ele vai imprimir
no console antes que eu terminei de
escrever o arquivo porque é muito mais
rápido escrevendo console do que
escreveu um arquivo salvar o arquivo no
disco tá Como é que eu faço se eu quiser
saber que terminou a escrita de arquivo
é para então por exemplo mandar o
console log in
o Originalmente o método único método
que existia era callback o que que é
callback é uma função que eu passo como
último argumento de outra função e essa
função subfunção vamos chamar assim vai
ser disparada quando a primeira terminar
então por exemplo eu posso ter aqui ó
é uma função com parâmetro certo
o que nada nada mais fácil do que
executam console. Log Só que essa função
só vai ser disparada quando o Hide files
terminar escrever o arquivo no disco
isso é um callback aquele que ele fez
uma função dentro é mas eu posso ter
essa função de fora ela também funciona
perfeitamente posso ter aqui um pano
chão pela X
e eu passo um artista cara já pode ser
assim também tem problema nenhum
e isso é um callback muita coisa até
hoje no dia ainda se faz assim porque
para algumas coisas é muito prático
Então vou pegar aqui no nosso projeto a
eu for em grupo 1
e para rota é muito comum a gente fazer
isso ainda a nuguette por exemplo eu
passo o caminho da minha rota e depois
na sequência eu passo funções que vão
lidar né com o resultado desse muguet
por exemplo Beleza tô aqui acaba aqui
mais complicado que eu botei Controller
junto né mas um cenário simples como eu
acho que uma semana a gente já fez com
controle mas um salário mais simples eu
poderia fazer assim ó poderia botar aqui
uma rota da teste e deu definiriam
callback aqui na sequência
E aí
a parte aqui dentro bota aí o que que
acontecer na secção aí ele vai dar um
response and
e essa estrutura aqui é o que a gente
chama de callback
ah ah mas onde é que eu tirei esses
parâmetros aqui esse para restaurante na
documentação do Express que você fez no
que a gente usa aqui e eles vão ser
enviados por essa função that quando ela
terminar de ser executada certo quando
ela terminar de bater a carregar dela de
de nome ela vai me passar as informações
aqui
Ah beleza então é só cobeca forma mais
básica no entanto eu tenho um problema
quarta forma aqui e é quando eu tenho
dentro do callback uma outra função
lenta Então imagina já aqui dentro Eu
preciso por exemplo escrever outro aqui
vo por algum motivo Ah então vou vir
aqui o wi-fi ou e daí eu tenho outro
arquivo que eu quero escrever
e daí com outro texto Dentro e daí
consequentemente se eu quiser saber
quando é que ele terminou de escrever eu
tenho que fazer outro Beck
e esse esse elemento tiver outro na
outro outro lançamento Lembrando que o
outro callback assim por diante e o seu
que a gente chama de callback Hell aqui
é o inferno os colups se eu tenho só um
nível callback funciona que é uma
maravilha não incomoda ninguém agora só
começa a ter vários níveis eu começo a
precisar de coisas mais modernas e mais
diretamente no Script como por exemplo
Promises e foi mais filho que veio Se
não me engano 2015 a se não me engano
posso tá errado
e como é que eu trabalho compromise
a inveja o ter este callback aqui eu
termino a minha função normalmente né um
com meus parentes e depois da minha
função eu posso botar na mesma linha Eu
costumo quebrar tá mas geralmente já viu
só quero mas você pode focar vitamina A
gente pode usar um 10. Dela
bom então quando terminar o neném tá o
inglês né eu vou mandar de cabelo
arquivo e então quando terminar escrever
o que que vai acontecer vai acontecer o
que eu defini aqui então nós tem que ir
na verdade ainda é como se fosse um
callback certo só maneira mais elegante
de escrever o dedo aqui vai executar é o
callback de retorno na minha strengh com
por exemplo um console log de x
Ah se eu tivesse uma outra função lenta
que dentro né Por exemplo o outro FS
with o certo é o mesmo tempo que eu
mostrei mais
e eu poderia retornar ele e eu trataria
o callback dele num outro dentro eu
achei segundo dela só vai executar
depois terminar o primeiro
bom então ao invés de eu ter um monte de
funções dentro de funções callback Hell
Eu tenho um dele abaixo do outro que é
mais fácil de entender lendo o código
não fica entrando e saindo de função o
tempo todo tá se der o erro em alguma
função certo eu posso usar um teste e
tratar o erro geralmente o pet vai ter
um objeto de erro né eu posso tratar o
erro fazendo alguma coisa com ele tá com
é assim que a gente trabalha com Alex e
compromisso
e depois de Promises mas teve ainda uma
outra evolução que é que a gente tem
mais utilizado hoje em dia que é o
async-await um é que funciona o assunto
ao leite a invés do que esses monte de
dentro aqui vai ficar ainda pode
incomodar né porque o código acaba
ficando muito grande o que que eu faço
se o meu wi-fi caiu ele é uma operação
lenta eu posso dizer para o node né que
eu vou aguardar esta linha
e o resultado dela com comando de leite
Boa tarde estamos usando aqui para ele
aguardar né a execução então isso vai
para linha de baixo depois que ele
terminar execução dessa linha aqui nesse
eu tiver outra operação lenta eu posso
usar um outra Leite logo abaixo também
E aí eu passo o tablet se Essas funções
Retornam alguma coisa eu posso antes da
leite colocar variável que vai receber o
retorno ó eu poderia fazer isso aqui
então o wi-fi vai executá-la o Noddy vai
se organizar internamente para que
quando ele terminar vem o valor de
retorno e seja guardado nesse teste aqui
para depois ele ir para linha de baixo
tem um último ponto que eu gostaria de
falar de leite é que o ao leite para ele
funcionar ele exige que eu esteja dentro
de uma função assim Conan certo e eu
digo que uma função é assim Cor na
colocando antes do funtion a palavra
assim que é
o homem Então qual o leite para ele
funcionar eu tenho que está dentro uma
função e essa função tem que ter a
palavra reservada assim aqui antes de
funk
é porque é isso internamente o Noddy vai
continuar utilizando-o como
é isso aqui é o que a gente chama de
syntax sugar aqui é uma forma de
escrever o código mais elegante mais bem
organizada certo não tem que não tem um
monte de níveis Né tava ali debaixo da
outra mas depois como ele vai dizer que
tá isso vai ser do jeito antigo
compromissos ainda então quando eu digo
que a função é assim com a um
interpretador do molde né ele já fica
esperto o pai então vai ter ao leite e
levar hoje porque Dá Uma segurada aí na
execução e deles organiza melhor então
esse aqui é obrigado só vou usar o leite
eu tenho que tá dentro de uma função a
sua beleza
bom então o callback aproxime-se e o
async-await eles servem para mesma coisa
organizar código assíncrono a diferença
é a forma como escrevo e em alguns casos
fica melhor usar um ou fica melhor usar
outro Último Ponto que vale mencionar se
eu tiver erro aqui no meu bloco Jacinto
Leite eu posso dar um repete né que é
uma estrutura aqui vocês encontram
várias linguagens de programação eu
posso dar um paquete para capturar o
erro entender o que que houve fazer
alguma coisa com esse tá bom assim que
await Promise callbex não tem diferença
alguma em relação um diferença que vale
a pena se preocupar em relação à
performance tá porque na verdade o assim
com leite vai virar na hora de
interpretar e vai virar mesma coisa que
promete se e Promises na verdade é tem o
mesmo funcionamento de codecs também sou
humano
é melhor separar o que que eu digo que
usasse então Leite provas etc não mata
na vantagem download Porque mesmo tô
usando eles o node por si só ele ele
trabalha de uma forma muito diferente
mais utilizada em que algumas linguagens
web mais tradicionais linguagens web
tradicionais quando você recebe uma
requisição do usuário essa linguagem
coluna praticamente né a sua Ted de
execução isso é muito comum sério
problema clássico de Apache com PHP por
exemplo a cada questão que vinha ou a
pasta lá e clonava um processo de PHP
isso ocasionava muita perda de
performance porque às vezes o processo
falar com nada e ninguém tava nem usando
ele o novo ele trabalha com o único
event loop ele vai fazer essas
ramificações em background quando
precisa e se precisar tá então por
padrão ele vai tá sendo utilizado mais
do que outras linguagens web mais
tradicionais a mesma a gente usando
essas pessoas mecanismos aqui ó
o leite eu não bloqueio o node método
mais semana que só entra quando elas mas
aquele fluxo daquele usuário ele vai
ficar aguardando um sinal de quando
terminar com a operação para ele voltar
executar só isso ah mas o olho como todo
continuar trabalhando a mil que a
segunda questão de todo mundo tem
problema né E aí agora conseguiu
entender a diferença de callback
Promises async-await e como é que a
gente usa cada um deles não ficou com
alguma dúvida chama aí nos comentários
abaixo do vídeo que eu terei o maior
prazer em responder se você ficou
curioso sobre o projeto que estava
construindo ali na aula ou se você
gostou da minha de idade que quer
conhecer os meus cursos na descrição do
vídeo você encontra os links e mais
informações de como se tornaram mais o
volume essa mais de 400 alunos de
programação que eu tenho fazendo os meus
cursos Espero que você se torne mais um
deles tá bom obrigado pela audiência Não
esquece de sair deixar o seu like se
inscreva no canal valeu

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

Assista também

#5 - Bot para Binance em Node.js

Persistência Poliglota - Usando vários bancos em uma aplicação!

Gestão de Projetos com Scrum: Como Começar? (Aulão)

O que é MongoDB? E para que serve?

#4 - Bot para Binance em Node.js

O que é Node.js? E para que serve?