Descubra os Temporizadores de JavaScript
Quando estiveres a escrever código de JavaScript, podes desejar atrasar a execução de uma função. Aprenda como usar setTimeout e setInterval para agendar funções no futuro
Tabela de Conteúdos
setTimeout()
Quando estiveres a escrever código de JavaScript, podes desejar atrasar a execução de uma função.
Isto é trabalhado para a setTimeout
. Tu especificas uma função de resposta para ser executada mais tarde, e um valor expressando o quão mais tarde queres que a mesma seja executada, em milissegundos:
A sintaxe a seguir define uma nova função. Tu podes chamar qualquer outra função que quiseres nela, ou podes passar um nome de função existente, e um conjunto de parâmetros:
A função setTimeout
retorna o identificador do temporizador. Isto geralmente não é usado, mas podes armazenar este identificador, e limpá-lo se quiseres eliminar esta execução de função agendada:
Atraso Zero
Se especificares o atraso da pausa para 0
, a função de resposta será executada o mais cedo possível, mas depois da execução da função atual:
Este código imprimirá:
Isto é especialmente útil para evitar o bloqueio da CPU em tarefas intensivas e deixar as outras funções serem executadas enquanto realizamos um cálculo intenso, pelo enfileiramento de funções no agendador.
Alguns navegadores (Internet Explorer e Microsoft Edge) implementam um método setImmediate()
que faz esta mesma exata funcionalidade, mas não é padronizada e não está disponível em outros navegadores. Mas é uma função padronizada na Node.js.
setInterval()
A setInterval
é uma função parecida com a setTimeout
, com uma diferença: no lugar de executar a função de resposta apenas uma vez, irá executá-la para sempre, num intervalo de tempo específico que especificares (em milissegundos):
A função acima executa a cada 2 segundos a menos que a digas para parar, usando a função clearInterval
, passando-a o identificador do intervalo que a setInterval
retornou:
É comum chamar a função clearInterval
dentro da função de resposta da função setInterval
, para permiti-la determinar automaticamente se deveria executar novamente ou parar. Por exemplo este código executa alguma coisa a menos que o valor de App.somethingInWait
seja estritamente igual a sequência de caracteres arrived
:
setTimeout
Recursivo
A função setInterval
inicia uma função a cada n
milissegundos, sem nenhuma consideração sobre quando uma função terminou a sua execução.
Se uma função sempre demorar a mesma quantidade de tempo, está tudo bem:
Talvez a função demora diferentes tempos de execução, dependendo das condições de rede por exemplo:
E talvez uma longa execução sobreponha a próxima execução:
Para evitar isto, podes agendar uma fun ção setTimeout
recursiva para ser chamada quando a função de resposta terminar:
para alcançar este cenário:
As funções setTimeout
e setInterval
estão disponíveis na Node.js, através do módulo timers
.
A Node.js também fornece setImmediate()
, que é equivalente a usar setTimeout(() => {}, 0)
, na maior parte das vezes usada para trabalhar com o Laço de Evento da Node.js.