Skip to content

Instantly share code, notes, and snippets.

@jv-amorim
Last active September 23, 2021 22:21
Show Gist options
  • Save jv-amorim/b81482c49e5bb63b38744d59aaf3d35e to your computer and use it in GitHub Desktop.
Save jv-amorim/b81482c49e5bb63b38744d59aaf3d35e to your computer and use it in GitHub Desktop.
Async (JavaScript)
let gitHubApi = 'https://api.github.com/users/JV-Amorim/repos';
// A) Usando a biblioteca Request (ultrapassada):
/*
const request = require('request');
request(gitHubApi, { headers: { 'User-Agent': 'node.js' } }, (err, res, body) => {
console.log(JSON.parse(body));
});
*/
// B) Usando a biblioteca Axios com promise:
/*
const axios = require('axios');
axios.get(gitHubApi).then(res => {
console.log(res.data);
});
*/
// C) Usando a biblioteca Axios com async/await:
/*
const axios = require('axios');
// Técnica IIFE (declarar uma função já executando-a):
(async () => {
const res = await axios.get(gitHubApi);
console.log(res.data);
})();
*/
// C.1) O código abaixo gera baixa performance, já que cada operação
// assíncrona aguarda a superior finalizar, mesmo sem necessidade:
/*
const axios = require('axios');
gitHubApi = user => `https://api.github.com/users/${user}/repos`;
(async () => {
console.time()
await axios.get(gitHubApi('JV-Amorim'));
await axios.get(gitHubApi('torvalds'));
await axios.get(gitHubApi('akitaonrails'));
console.timeEnd()
})();
*/
// C.2) O problema do C.1 pode ser facilmente solucionado com o Promise.all:
const axios = require('axios');
gitHubApi = user => `https://api.github.com/users/${user}/repos`;
(async () => {
console.time()
const p1 = axios.get(gitHubApi('JV-Amorim'));
const p2 = axios.get(gitHubApi('torvalds'));
const p3 = axios.get(gitHubApi('akitaonrails'));
await (Promise.all([p1, p2, p3]));
console.timeEnd()
})();
// ---
console.log('Teste');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment