Fiquei meio perdido, com await não era para ser síncrona?
Não. O core
de funções assíncronas é entender como funciona o await
. Considere o seguinte exemplo:
Um chefe de cozinha tem que preparar um frango ao molho dentro de 1 horas. Se ele fizer tudo em sequência, ou seja, primeiro o frango, depois o molho, logo em seguida em pratar e finalizar com acompanhamentos, demoraria demais. (isto seria uma operação síncrona, tudo feito uma por vez, não ao mesmo tempo).
Agora, qual é a solução para isso? Simples, temos que fazer tudo ao mesmo tempo intercalando (operação assícnrona concorrente). Então o chefe coloca o frango no forno, enquanto isso prepara o molho e coloca no fogo. Enquanto o frango e o molho esta no fogo, ele precisa separar os pratos e deixar em posição para colocar o frango.
O molho terminou primeiro que o frango, mas não podemos colocar o molho no prato e depois o frango, tem que ser o frango e depois o molho, e agora? Agora ele "ESPERA" (await
). Então, quando o frango estiver pronto, ele coloca no prato e logo em seguida, o molho que estava esperando é colocado por cima.
Consegue ver a analogia? Quando queremos que uma operação só seja concluída somente quando outra termine, queremos esperar, e é exatamente isso que o await
faz, deixa tudo abaixo dele esperando até que atividadade em processo termine, para poder começar outra.
E tudo aquilo que leva tempo para ser concluído, ou seja, não bloqueia o resto do programa abaixo dele, no caso, a função assíncrona não vai bloquear o resto do programa que é síncrono, é uma operação assíncrona.
Considere o seguinte código:
async function HandleMyFetch() {
const myFetch = await fetch('url')
// mesmo que demore 10 segundos, o resto do programa fora do escopo desta função
// continua sendo interpretado.
return myFetch;
// retorna uma Promise com o valor do retornado do Fetch. Se não fosse o "await", iria
// retorna "undefined" pois o retorno iria executar antes do "fetch" estar pronto, e
// não esperar.
}
Não sei se deu para entender. Mas não tenha vergonha em perguntar. Eu responderei todas as dúvidas que você tiver 😄
Opa, eu entendi sim, quando fiz a pergunta eu já fui pesquisar sobre, descobri que estava usando async await de forma errada em quase 100% dos casos kkkkkkkkkkk.
Não há vergonha nisso, Meu nobre. O importante é aprender. Eu também usei por bastante tempo async/await errado por muito tempo. Não só isso na verdade. Escrever este artigo foi como um certificado para mim mesmo, de que eu finalmente entendi.
Espero ter ajudado de alguma forma :)