【发布时间】:2019-02-05 22:54:47
【问题描述】:
我正在创建一个脚本,该脚本将在经过一定时间后执行任务。我希望用户能够取消这些任务的执行。我可以通过将超时保存到一个列表中来做到这一点,然后我用它来取消所有超时。但是,如果超时正常完成,它仍会存储在该列表中。
在尝试清除超时之前,如何检查超时是否已经完成或取消?
var timeouts = [];
$(document).on('click', '.doTask', function() {
var timeout = setTimeout(() => {
doTaskAfter();
}, 10000);
timeouts.push(timeout);
});
$(document).on('click', '.cancelTasks', function() {
var i = timeouts.length;
while (i--) {
if (timeouts[i].finished || timeouts[i].timeoutCleared) { // How to I check this?
clearTimeout(timeouts[i]);
}
timeouts.splice(i, 1);
}
});
【问题讨论】:
-
据我所知,您需要自己跟踪超时的完成情况
-
您可以在完成后从
timeouts数组中删除计时器ID。然后当您稍后遍历timeouts时,您就会知道您不会遇到已完成的计时器。 -
我可能不完全理解这个问题,但你为什么关心超时是否完成?您似乎想取消所有计时器,为什么不在您的
while中添加clearTimeout(timeouts[i])?
标签: javascript