Bei der Arbeit mit JavaScript kann es notwendig sein, den Ablauf asynchroner Vorgänge wie Zeitüberschreitungen zu steuern. Hier untersuchen wir Möglichkeiten, aktive Zeitüberschreitungen anzuhalten und fortzusetzen sowie die verbleibende Zeit der aktuellen Zeitüberschreitung abzurufen.
Um eine Zeitüberschreitung anzuhalten, können Sie einen Wrapper verwenden Funktion, die den window.setTimeout-Aufruf abfängt und die erforderliche Funktionalität bereitstellt. Die Wrapper-Funktion Timer verwendet eine Rückruffunktion und eine Verzögerung als Argumente und übernimmt das Anhalten, Fortsetzen und Verfolgen der verbleibenden Zeit.
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();
};
Um diesen Wrapper zu verwenden, instanziieren Sie ein Timer-Objekt und rufen bei Bedarf dessen Methoden pause() und resume() auf.
Um die verbleibende Zeit zu erhalten Eine Möglichkeit besteht darin, die Startzeit zu speichern, wenn das Timeout eingestellt ist, und die Differenz zwischen der aktuellen Zeit und der Startzeit zu berechnen pausiert.
var start = Date.now();
var t = setTimeout("dosomething()", 5000);
var remaining = (start 5000) - Date.now();
Es ist jedoch wichtig zu beachten, dass diese Berechnung möglicherweise nicht korrekt ist, wenn das Timeout angehalten und fortgesetzt wurde. In der zuvor bereitgestellten Timer-Wrapper-Funktion wird die verbleibende Zeit verfolgt und entsprechend aktualisiert, was eine zuverlässigere Methode zum Abrufen der verbleibenden Zeit bietet.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3