Skip to content

Instantly share code, notes, and snippets.

@ricardovsilva
Last active May 23, 2021 23:00
Show Gist options
  • Save ricardovsilva/a969d5cad9a34f54dbf818ada4fb446d to your computer and use it in GitHub Desktop.
Save ricardovsilva/a969d5cad9a34f54dbf818ada4fb446d to your computer and use it in GitHub Desktop.
example of async/await js
/* 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");
@MarcelaBarella
Copy link

thks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment