ฉันสะดุดกับสิ่งนี้เมื่อพยายามล็อกเอาต์ผู้ใช้โดยอัตโนมัติด้วยเซสชันที่หมดอายุ วิธีแก้ปัญหาของฉันคือเพียงรีเซ็ตการหมดเวลาหลังจากผ่านไปหนึ่งวันและคงฟังก์ชันการทำงานไว้เพื่อใช้ clearTimeout
นี่คือตัวอย่างต้นแบบเล็กน้อย:
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);
}
};
การใช้งาน:
var timer = new Timer('2018-08-17 14:05:00', function() {
document.location.reload();
});
และคุณสามารถล้างได้ด้วยstopTimer
วิธีการ:
timer.stopTimer();
delay >>> 0
เกิดขึ้นดังนั้นความล่าช้าที่ส่งผ่านจึงเป็นศูนย์ ไม่ว่าจะด้วยวิธีใดก็ตามความจริงที่ว่าการหน่วงเวลาถูกจัดเก็บเป็น int ที่ไม่ได้ลงนาม 32 บิตจะอธิบายถึงพฤติกรรมนี้ ขอบคุณ!