Programação Assíncrona

  • setTimeout (Função assíncrona que agenda uma ação para o futuro, colocando no final do event loop do javascript, sendo executada após X milissegundos que for passado).

console.log(1);

setTimeout(() => {
    console.log(2);    
}, 5000);

console.log(3);

// 1
// 3
// 2
  • setInterval (Função assíncrona que executa uma ação a cada X milissegundos)

setInterval(() => {
    console.log('Executando a cada 2 segundos');
}, 2000);
  • callback

const githubApi = 'https://api.github.com/users/nicollaslopes/repos' 

axios.get(githubApi).then(res => {
    console.log(res.data);
})
  • promise

const axios = require('axios');

(async () => {

    const githubApi = user => `https://api.github.com/users/${user}/repos` 

    console.time()
    
    const res1 = await axios.get(githubApi('nicollaslopes'));
    const res2 = await axios.get(githubApi('DanielHe4rt'));
    const res3 = await axios.get(githubApi('rmanguinho'));
    
    console.timeEnd()
})() // default: 1.997s

Rodando as requisições em paralelo (é útil quando as demais requisições de baixo não são dependente de alguma em cima).

const axios = require('axios');

(async () => {

    const githubApi = user => `https://api.github.com/users/${user}/repos` 
    
    console.time()
    const p1 = axios.get(githubApi('nicollaslopes'));
    const p2 = axios.get(githubApi('DanielHe4rt'));
    const p3 = axios.get(githubApi('rmanguinho'));
    
    await Promise.all([p1, p2, p3]);

    console.timeEnd()
})() // default: 559.312ms
  • async await

const axios = require('axios');

(async () => {

    const githubApi = 'https://api.github.com/users/nicollaslopes/repos' 

    const result = await axios.get(githubApi);
    
    console.log(result.data);
})()
  • Event Loop

Last updated