Last active
May 23, 2021 23:00
-
-
Save ricardovsilva/a969d5cad9a34f54dbf818ada4fb446d to your computer and use it in GitHub Desktop.
example of async/await js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Todas as funções async do js retornam sempre Promises. As Promises podem retornar algo | |
* ou não. Se você retornar uma string em um método async, será retornada uma Promise que | |
* resolve em uma string. | |
*/ | |
/* Só é possível usar a palavra await dentro de funções assincronas. */ | |
const axios = require('axios'); | |
const api = 'https://swapi.dev/api/'; | |
const getVehicles = async () => { | |
const response = await axios.get(`${api}people/1`); | |
// Pega o valor de vehicles e joga para uma constante vehiclesAddresses | |
const { vehiclesAddresses: vehicles } = response.data; | |
/* A function map recebe uma function para fazer o map. Neste caso está recebendo uma função async. | |
* No caso abaixo, o map retornará um array de Promises em que cada promise resolve para name | |
*/ | |
const namesPromises = vehiclesAddresses.map(async vehicleAddress => { | |
const response = await axios.get(vehicleAddress); | |
const { name } = res.data; | |
return name; | |
}); | |
/* O Promise.all encapsula um array de promises e retorna só uma promise. | |
* Quando chamamos await Promise.all é similar a chamar join em outras linguagens multi thread, tipo C++. | |
* A linha abaixo vai esperar todas as promises do namesPromises serem resolvidas. Então vai pegar os valores | |
* resolvidos e retornar para a variável names. | |
* A variável names será um array de strings. | |
* Se não houvesse o await, a variável names iria guardar uma Promise. | |
*/ | |
const names = await Promise.all(namesPromises); | |
return names; | |
} | |
/* O script em si não é assincrono, por isso não podemos usar await aqui. | |
* Então isolamos toda a lógica do código em outra função, que é async, e aqui a chamamos com o then. | |
* Essa linha será executada e a linha abaixo dela logo em seguida, antes que a Promise seja finalizada. | |
* Portanto a palavra potato será impressa no console antes da chamada para a api ser finalizada. | |
*/ | |
getVehicles().then(names => console.log(names)); | |
console.log("potato"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thks