Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] setTimeout || funções assincronas

Olá, tudo bem? eu entendi o conceito de funções assincronas e também do setTimeout (que nao é dado nesse curso de agora, vou apenas citar um exemplo com ele), mas queria tirar uma dúvida que talvez seja desnecessária. Digamos que eu tenha uma função assincrona com um await dentro dela, certo? Depois de ter ela criada, eu vou chamar ela para executar. A minha dúvida é a seguinte: quando o código estiver na linha do await, ele vai parar a execução da função, até que tal operação seja concluida, certo? Porém, todo o restante do código, depois de chamar a função assincrona, vai ser executado normalmente, pois a função assincrona é executada, mas o restante do código continua sendo executado de forma sincrona, certo? Entretanto, queria saber de uma coisa, digamos que eu tenha um código IMENSO que demore MUITO tempo para ser executado. A função assincrona seria executada ao decorrer do código? ou apenas no FINAL do código? como ficaria a execução dela dessa forma? como ela lidaria com isso? Uma última coisa, queria saber como seria o comportamento por exemplo do setTimeout para isso, pois se eu por exemplo setar um timeOut de 1000 ms, isso só vai ser contabilizado depois do fim de TODO o código? como seria o comportamento dele?

(Um exemplo de código, caso tenha ficado confuso):

Insira aqui a descrição dessa imagem para ajudar na acessibilidade-

Grato!

1 resposta
solução!

Oi, Rian, tudo bem?

Quando você tem uma função assíncrona que utiliza await, de fato, a execução dentro dessa função é pausada até que a promessa seja resolvida. Porém, o restante do código fora dessa função continua sendo executado normalmente. Isso significa que se você chamar uma função assíncrona e, logo em seguida, tiver mais código, esse código será executado enquanto a função assíncrona aguarda a resolução da promessa.

Agora, sobre a execução de um código imenso que demora muito para ser executado, a função assíncrona não esperará todo o código síncrono terminar para começar a ser executada. Ela inicia sua execução imediatamente, mas as operações marcadas com await dentro dela vão aguardar suas respectivas promessas serem resolvidas, independentemente de quanto tempo o código síncrono demore para rodar.

Quanto ao setTimeout, ele agendará uma função para ser executada após o tempo especificado, não importando se o código síncrono continua rodando ou não. O setTimeout não bloqueia a execução do código, ele apenas garante que a função que você passou para ele não será executada até que o tempo definido passe, mesmo que todo o código síncrono já tenha terminado.

No seu exemplo, se você colocar um setTimeout com 1000 ms, a função dentro dele será executada aproximadamente 1000 ms após ser agendada, mesmo que o código síncrono ainda esteja rodando.

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!