Saya tersandung pada ini ketika saya mencoba untuk mengeluarkan pengguna secara otomatis dengan sesi yang kedaluwarsa. Solusi saya adalah mengatur ulang waktu tunggu setelah satu hari, dan tetap menggunakan fungsionalitas untuk menggunakan clearTimeout.
Berikut adalah contoh prototipe kecil:
Timer = function(execTime, callback) {
if(!(execTime instanceof Date)) {
execTime = new Date(execTime);
}
this.execTime = execTime;
this.callback = callback;
this.init();
};
Timer.prototype = {
callback: null,
execTime: null,
_timeout : null,
/**
* Initialize and start timer
*/
init : function() {
this.checkTimer();
},
/**
* Get the time of the callback execution should happen
*/
getExecTime : function() {
return this.execTime;
},
/**
* Checks the current time with the execute time and executes callback accordingly
*/
checkTimer : function() {
clearTimeout(this._timeout);
var now = new Date();
var ms = this.getExecTime().getTime() - now.getTime();
/**
* Check if timer has expired
*/
if(ms <= 0) {
this.callback(this);
return false;
}
/**
* Check if ms is more than one day, then revered to one day
*/
var max = (86400 * 1000);
if(ms > max) {
ms = max;
}
/**
* Otherwise set timeout
*/
this._timeout = setTimeout(function(self) {
self.checkTimer();
}, ms, this);
},
/**
* Stops the timeout
*/
stopTimer : function() {
clearTimeout(this._timeout);
}
};
Pemakaian:
var timer = new Timer('2018-08-17 14:05:00', function() {
document.location.reload();
});
Dan Anda dapat menghapusnya dengan stopTimer
metode:
timer.stopTimer();
delay >>> 0
terjadi sesuatu seperti , jadi penundaan yang dilewati adalah nol. Bagaimanapun, fakta bahwa penundaan disimpan sebagai 32-bit unsigned int menjelaskan perilaku ini. Terima kasih!