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?
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.
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?
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();
})();