जब मैंने किसी उपयोगकर्ता को समाप्त सत्र के साथ स्वचालित रूप से लॉगआउट करने का प्रयास किया तो मैं इस पर अड़ गया। मेरा समाधान सिर्फ एक दिन के बाद टाइमआउट को रीसेट करना था, और स्पष्टता का उपयोग करने के लिए कार्यक्षमता रखना।
यहाँ थोड़ा प्रोटोटाइप उदाहरण है:
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
होता है, इसलिए पारित विलंब शून्य है। किसी भी तरह से, तथ्य यह है कि देरी को 32-बिट अहस्ताक्षरित इंट के रूप में संग्रहीत किया जाता है, इस व्यवहार की व्याख्या करता है। धन्यवाद!