Ao contrário de outras linguagens de programação, o JavaScript não possui um método de suspensão integrado. Portanto, você não pode simplesmente chamar uma função sleep() para pausar um programa Node.js. No entanto, existem outras maneiras de fazer um programa aguardar um tempo especificado.
Este tutorial discute três abordagens: setTimeout, async/await e o pacote sleep-promise.
Usando setTimeout() para aguardar um horário específico
o setTimeout() A função agenda o código para que o tempo de execução seja executado após um determinado período de tempo. Aceita uma função e um tempo de atraso em milissegundos. Aqui está a sintaxe:
setTimeout(função(), timeInMs)
Por exemplo, digamos que você tenha uma função que imprime no console:
funçãoimprimir frase() {
console.log("Usando setTimeout()")
}
Para executar a função acima após dois segundos, passe a função e o tempo de atraso de 2000ms para o setTimeout() função:
setTimeout (printSentence, 2000)
Embora isso funcione, não é garantido que sua função seja executada exatamente após dois segundos. Definitivamente, levará pelo menos esse tempo, mas pode levar mais.
setTimeout() é preciso?
Sim, mas com algumas ressalvas. setTimeout() é um função JavaScript assíncrona o que significa que não é bloqueante. O código que você agendar é adicionado ao loop de eventos enquanto o resto do seu programa continua.
Depois que o tempo de atraso passar, seu programa executará o código programado, mas somente quando estiver livre para fazê-lo. Se outro código estiver na pilha de chamadas, ele será executado primeiro, mesmo que o código agendado deva ser executado. É aqui que o tempo de atraso extra pode ocorrer, daí a imprecisão.
Considere o seguinte programa.
console.log("Olá Mundo!")
funçãoimprimir frase() {
console.log("Usando setTimeout()")
}
setTimeout (printSentence, 2000)
console.log("Feito")
Veja o que o console exibirá quando você o executar:
Olá Mundo!
Feito
Usando setTimeout()
Este programa introduz um atraso, mas apenas atrasa o código que passa para setTimeout(). O resto do programa continua, com o código programado apenas interrompendo-o uma vez que a duração tenha decorrido. Se você quiser executar todo esse código em ordem, com uma pausa no meio, usando setTimeout() não funciona.
Uma alternativa é escrever código síncrono que bloqueie a execução pelo tempo que você precisar. Por exemplo, você pode usar um fazer enquanto loop para bloquear o thread de execução até que o tempo de atraso termine:
funçãoatraso(EM) {
const data = Encontro.agora();
deixar data atual = nulo;Faz {
data atual = Encontro.agora();
} enquanto (data atual - data < ms);
}
console.log("Olá Mundo");
atraso (2000);
console.log("Será impresso após 2 segundos!");
o atraso() a função faz um loop até que o tempo atual seja igual ou maior que seu tempo de início mais o atraso. A desvantagem dessa abordagem é que ela consome muita CPU, especialmente com grandes atrasos. o faça... while loop tem que calcular o tempo restante após cada milissegundo.
Usando Async/Await para atrasar um programa Node.js
A aguardam expressão faz com que a execução seja pausada até que uma promessa seja resolvida. Ele permite que você execute código assíncrono como se fosse síncrono, mas com mais eficiência do que bloqueando manualmente a execução. Você só pode usar await dentro de uma função marcada assíncrono.
funçãoatraso(Tempo) {
RetornanovoPromessa(resolver => setTimeout (resolver, tempo));
}assíncronofunçãoimprimir frase() {
console.log("Olá Mundo")
aguardam atraso(2000);
console.log("Será impresso após 2 segundos");
}
printSentence();
Esta é a saída do programa acima:
Olá Mundo
Será impresso após 2 segundos
Usando o pacote sleep-promise
o promessa de sono O pacote simplifica o processo de pausar programas Node.js. Você só precisa chamá-lo e especificar o tempo de atraso em milissegundos.
Comece instalando-o via npm:
npm instalardorme-promessa
Aqui está um exemplo de como você pode usá-lo em seu programa:
const dormir = exigir('promessa de dormir');
(assíncrono () => {
console.log("Olá Mundo.");
aguardam dorme(2000);
console.log("Será impresso após dois segundos.");
})();
Ao executar o programa, a saída será a seguinte.
Olá Mundo.
Será impresso após dois segundos.
Escolhendo uma abordagem adequada
Implementar uma funcionalidade de suspensão no Node.js pode ser complicado. Ao decidir como fazê-lo, considere o que você deseja alcançar. Se você quiser apenas atrasar algum código, por um período mínimo de tempo, setTimeout() é uma boa opção. Mas se você quiser pausar a execução de todo o seu programa, você deve usar assíncrono/aguardar.
Síncrono vs. Programação assíncrona: como eles são diferentes?
Leia a seguir
Tópicos relacionados
- Programação
- Desenvolvimento web
- Programação
- JavaScript
Sobre o autor
Mary Gathoni é uma desenvolvedora de software apaixonada por criar conteúdo técnico que não seja apenas informativo, mas também envolvente. Quando ela não está codificando ou escrevendo, ela gosta de sair com os amigos e estar ao ar livre.
Assine a nossa newsletter
Junte-se à nossa newsletter para dicas de tecnologia, análises, e-books gratuitos e ofertas exclusivas!
Clique aqui para assinar