重置前方法clearTimeout不起作用

时间:2019-04-16 19:00:44

标签: sapui5

我正在尝试在此处设置用户空闲超时。一切似乎都可以正常工作... clearTimeout函数除外。事件起作用,setTimeout起作用,但是无论我做什么,一旦我第一次设置它,就无法停止它。从我的主控制器的onBeforeRendering函数调用方法。调试器无可见错误。有帮助吗?

			setTimeOut: function () {
				var self = this;

				var timeOut = function userTimeout() { 
					jQuery.sap.log.error("TIMEOUT");
					try {
						if (self.getModel("Global").getProperty("/RecordUnlocked") === true) {	
							self._unlockRecord();
						}
					} catch(e) { 
						jQuery.sap.log.error("TIMEOUT"); 
						
					};
					try {					
						var navHistory = self.getView().getModel("Global").getProperty("/NavHistory");	
						history.go(navHistory);						
					} catch(e) { 
						jQuery.sap.log.error("TIMEOUT"); 
						
					}	
/*							MessageBox.show(self.getModel("i18n").getResourceBundle().getText("timeOut"), {
						onClose: function(oAction) {*/
				};

				function reset() {
				    clearTimeout(timeOut);
				    setTimeout(timeOut, 20000); 
				}	
				
				document.onmousemove = reset;
				document.onkeypress = reset;

			}

1 个答案:

答案 0 :(得分:0)

window.clearTimeout清除window.setTimeout的返回值,而不是您在超时本身中正在执行的函数。

您拥有的timeout变量实际上不是setTimeout函数的结果,而是您定义的函数。

通常,类似

var myTimeoutFunction = _ => console.log('hi');
var myTimeout = window.setTimeout(myTimeoutFunction, 20000);
window.clearTimeout(myTimeout);

警告一下,您自己的功能也称为setTimeout。在鼠标和键事件的回调中执行哪一个取决于当前上下文。我猜您在这里很幸运,因为该事件将在窗口上下文中运行,但是如果您绑定了函数或其他东西,可能会造成混淆