A diferencia de otros lenguajes de programación, JavaScript no tiene un método de suspensión incorporado. Por lo tanto, no puede simplemente llamar a una función sleep() para pausar un programa Node.js. Sin embargo, hay otras formas de hacer que un programa espere un tiempo específico.
Este tutorial analiza tres enfoques: setTimeout, async/await y el paquete sleep-promise.
Usando setTimeout() para esperar un tiempo específico
Él establecerTiempo de espera() La función programa el código para que el tiempo de ejecución se ejecute una vez que ha pasado una cantidad de tiempo establecida. Acepta una función y un tiempo de retardo en milisegundos. Aquí está la sintaxis:
establecerTiempo de espera(función(), tiempoEnMs)
Por ejemplo, supongamos que tiene una función que se imprime en la consola:
funciónimprimirfrase() {
consola.log("Usando setTimeout()")
}
Para ejecutar la función anterior después de que hayan transcurrido dos segundos, pase la función y el tiempo de retardo de 2000ms al establecerTiempo de espera() función:
setTimeout (imprimirSentencia, 2000)
Si bien esto funciona, no se garantiza que su función se ejecute exactamente después de dos segundos. Definitivamente tomará al menos esa cantidad de tiempo, pero puede tomar más.
¿Es setTimeout() preciso?
Sí, pero con algunas salvedades. establecerTiempo de espera() es un función JavaScript asíncrona lo que significa que no bloquea. El código que programa se agrega al bucle de eventos mientras continúa el resto de su programa.
Después de que pase el tiempo de demora, su programa ejecutará el código programado, pero solo cuando esté libre para hacerlo. Si hay otro código en la pila de llamadas, se ejecutará primero, incluso si el código programado debe ejecutarse. Aquí es donde puede ocurrir un tiempo de retraso adicional, de ahí la imprecisión.
Considere el siguiente programa.
consola.log("¡Hola Mundo!")
funciónimprimirfrase() {
consola.log("Usando setTimeout()")
}
setTimeout (imprimirSentencia, 2000)
consola.log("Hecho")
Esto es lo que mostrará la consola cuando la ejecute:
¡Hola Mundo!
Hecho
Usando setTimeout()
Este programa introduce un retraso, pero solo retrasa el código que pasa a establecerTiempo de espera(). El resto del programa continúa, y el código programado solo lo interrumpe una vez que ha transcurrido la duración. Si desea ejecutar todo este código en orden, con una pausa en el medio, usando establecerTiempo de espera() no trabajará.
Una alternativa es escribir código síncrono que bloqueará la ejecución durante el tiempo que necesite. Por ejemplo, podrías usar un hacer... mientras bucle para bloquear el hilo de ejecución hasta que se acabe el tiempo de retraso:
funcióndemora(milisegundo) {
constante fecha = Fecha.ahora();
dejar fecha actual = nulo;hacer {
fecha actual = Fecha.ahora();
} mientras (fechaactual - fecha}
consola.log("Hola Mundo");
retraso (2000);
consola.log("¡Se imprimirá después de 2 segundos!");
Él demora() La función se repite hasta que la hora actual sea igual o mayor que su hora de inicio más el retraso. La desventaja de este enfoque es que consume mucha CPU, especialmente con grandes retrasos. Él hacer... mientras bucle tiene que calcular el tiempo restante después de cada milisegundo.
Uso de Async/Await para retrasar un programa Node.js
Un esperar expresión hace que la ejecución se detenga hasta que se resuelva una Promesa. Le permite ejecutar código asincrónico como si fuera sincrónico, pero de manera más eficiente que bloqueando manualmente la ejecución. Solo puede usar await dentro de una función marcada asíncrono.
funcióndemora(tiempo) {
devolvernuevoPromesa(resolver => setTimeout (resolver, tiempo));
}asíncronofunciónimprimirfrase() {
consola.log("Hola Mundo")
esperar demora(2000);
consola.log("Se imprimirá después de 2 segundos");
}
imprimirSentencia();
Esta es la salida del programa anterior:
Hola Mundo
Se imprimirá después de 2 segundos
Uso del paquete de promesa de sueño
Él promesa de sueño El paquete simplifica el proceso de pausar los programas de Node.js. Solo necesita llamarlo y especificar el tiempo de retraso en milisegundos.
Comience por instalarlo a través de npm:
npm Instalar en pcdormir-promesa
Aquí hay un ejemplo de cómo podría usarlo en su programa:
constante dormir = exigir('promesa de dormir');
(asíncrono () => {
consola.log("Hola Mundo.");
esperar dormir(2000);
consola.log("Se imprimirá después de dos segundos.");
})();
Cuando ejecute el programa, la salida será la siguiente.
Hola Mundo.
Se imprimirá después de dos segundos.
Elegir un enfoque adecuado
Implementar una funcionalidad de suspensión en Node.js puede ser complicado. Al decidir cómo hacerlo, considere lo que quiere lograr. Si solo desea retrasar algún código, por una cantidad mínima de tiempo, establecerTiempo de espera() es una buena opción Pero si desea pausar la ejecución de todo su programa, debe usar asíncrono/espera.
Sincrónico vs. Programación asíncrona: ¿en qué se diferencian?
Leer siguiente
Temas relacionados
- Programación
- Desarrollo web
- Programación
- JavaScript
Sobre el Autor
Mary Gathoni es una desarrolladora de software apasionada por crear contenido técnico que no solo sea informativo sino también atractivo. Cuando no está codificando o escribiendo, le gusta salir con amigos y estar al aire libre.
Suscríbete a nuestro boletín
¡Únase a nuestro boletín para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!
Haga clic aquí para suscribirse