Al trabajar con JavaScript, puede ser necesario controlar el flujo de operaciones asincrónicas, como los tiempos de espera. Aquí, exploramos formas de pausar y reanudar tiempos de espera activos, así como recuperar el tiempo restante en el tiempo de espera actual.
Para pausar un tiempo de espera, puede utilizar un contenedor función que intercepta la llamada window.setTimeout y proporciona la funcionalidad necesaria. La función contenedora, Temporizador, toma una función de devolución de llamada y un retraso como argumentos y maneja la pausa, la reanudación y el seguimiento del tiempo restante.
var Timer = function(callback, delay) {
var timerId, start, remaining = delay;
this.pause = function() {
window.clearTimeout(timerId);
timerId = null;
remaining -= Date.now() - start;
};
this.resume = function() {
if (timerId) {
return;
}
start = Date.now();
timerId = window.setTimeout(callback, remaining);
};
this.resume();
};
Para usar este contenedor, cree una instancia de un objeto Timer y llame a sus métodos pausa() y reanudar() según sea necesario.
Para obtener el tiempo restante hora en el tiempo de espera actual, una forma es almacenar la hora de inicio cuando se establece el tiempo de espera y calcular la diferencia entre la hora actual y la hora de inicio cuando pausando.
var start = Date.now();
var t = setTimeout("dosomething()", 5000);
var remaining = (start 5000) - Date.now();
Sin embargo, es importante tener en cuenta que si el tiempo de espera se ha pausado y reanudado, es posible que este cálculo no sea preciso. En la función contenedora de temporizador proporcionada anteriormente, se realiza un seguimiento del tiempo restante y se actualiza en consecuencia, lo que proporciona un método más confiable para recuperar el tiempo restante.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3