Async/Await
O que fazer para evitar o callback hell e o chaining de promises?
No capítulo de promises, foi mostrado como uma promise funciona:
No exemplo acima, só há uma promise (marcado pelo ".then"), mas e se precisássemos utilizar a variável data em uma outra próxima promise?
Isso criaria um encadeamento de promises uma dentro da outra, e, no final, teríamos infinitas promises uma dentro da outra.
Algo como:
Para o código acima, dá-se o nome de callback hell.
E como podemos evitar isso? Usando async/await!
O que acontece com uma função marcada com async/await é que ela espera a promise ser terminada antes de continuar o código, exatamente como o .then, mas sem entrar nos problemas de chaining.
A única coisa que precisamos fazer é o seguinte:
Nesse exemplo, a função functionOne foi marcada para ser uma função "async" (assíncrona), e, dessa forma, qualquer função chamada com o "await" dentro dela irá fazer com que a functionOne espere (tradução de await) até que essa outra função (por exemplo, a functionTwo) termine sua operação assíncrona e retorne seu valor final para que a função-pai (functionOne) continue a sua execução.
Então se, por exemplo, a functionTwo for uma função que lê um determinado arquivo, a functionOne irá ficar parada naquela linha, esperando até que a functionTwo termine a sua execução e retorne o que tiver de retornar, antes de prosseguir para a próxima linha de código.
Last updated