GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[RESOLVIDO]Dúvidas no Async/Await

javascript
Tags: #<Tag:0x00007f8046752330>

#1

Boa tarde! Estou tentando fazer uso do async await para que uma função só seja executada após a primeira terminar, mas não estou conseguindo. Segue abaixo o código de testes:

logFirst = () => {
    setTimeout(() => console.log('this should happen first!'), 3000);
};

logSecond = () => {
    console.log('this should happen as the last function');
};
                
flow = async () => {

    let ok = await logFirst();
    logSecond();
};

flow();

Porém a logSecond() está sendo executada antes da logFirst(). Alguma dica de como resolver isso?


#2

Se você chamar sua funçao logFirst no console do browser, vai entender o que está acontecendo.
O setTimeout está agendando algo para ser executado mais tarde, mas retorna em seguida. Ou seja, a funçao logFirst termina, antes do setTimeout fazer alguma coisa. Se você quer o logSecond fazendo algo depois do setTimeout, deveria agendar ambos juntos.


#3

Entendi, mas em tese o async await está funcionando então né? Se ao inves do settimeout fosse uma operacao que realmente só terminasse depois de 3 segundos, a logSecond() iria ficar esperando?


#4

Consegui resolver. Com o seguinte exemplo funcionou:

logFirst = () => {
  return axios.get('https://swapi.co/api/planets')
  .then(res => console.log(res))
  .catch(err => console.log(err));
};

logSecond = () => {
  return console.log('this should happen as the last function');
};

(async () => {
  await logFirst();
  logSecond();
})();