При работе с JavaScript может возникнуть необходимость контролировать поток асинхронных операций, таких как таймауты. Здесь мы рассмотрим способы приостановки и возобновления активных тайм-аутов, а также получения оставшегося времени текущего тайм-аута.
Чтобы приостановить тайм-аут, вы можете использовать оболочку функция, которая перехватывает вызов window.setTimeout и предоставляет необходимую функциональность. Функция-оболочка Timer принимает функцию обратного вызова и задержку в качестве аргументов и обрабатывает приостановку, возобновление и отслеживание оставшегося времени.
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();
};
Чтобы использовать эту оболочку, создайте экземпляр объекта Timer и вызовите его методы паузы() и возобновления() по мере необходимости.
Чтобы получить оставшееся время время текущего тайм-аута, один из способов — сохранить время начала, когда тайм-аут установлен, и вычислить разницу между текущим временем и временем начала, когда пауза.
var start = Date.now();
var t = setTimeout("dosomething()", 5000);
var remaining = (start 5000) - Date.now();
Однако важно отметить, что если тайм-аут был приостановлен и возобновлен, этот расчет может быть неточным. В функции-оболочке таймера, представленной ранее, оставшееся время отслеживается и соответствующим образом обновляется, обеспечивая более надежный метод получения оставшегося времени.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3