我需要执行一些功能但是如果超时到期我需要中止这个功能。我尝试使用setTimeout和setImmediate。我写了这个例子并在回调中使用了setInterval来检查工作,但它没有帮助我:
function waiter(timeout, fun) {
var functionHandler = setImmediate(fun);
var timeoutHandler = setTimeout(() => {
console.log('stoped');
clearImmediate(functionHandler);
clearTimeout(timeoutHandler);
}, timeout);
fun();
}
waiter(5000, () => {
setInterval(() => {
console.log('work');
}, 500);
});
在clearImmediate和clearTimeout之后,我的间隔仍然有效。我如何理解该方法并不能保证我的函数将被中止。 有没有人知道如何中止函数执行?
更新 是的,我知道我应该调用clearInterval,但它只是工作检查的一个例子。例如,我应该解析一些大数据,如果不能超时,我需要取消此函数执行并调用其他内容。
答案 0 :(得分:0)
您需要命名您的间隔 并通过它的名字清除它。所以你的间隔不再是匿名的,但是你已经有了它的参考。
let counter = 10;
let newYearCountdown = setInterval( () => {
console.log(counter);
counter--
if (counter === 0) {
console.log("HAPPY NEW YEAR!!");
// here i clear interval by its name.
clearInterval(newYearCountdown);
}
}, 1000);
答案 1 :(得分:0)
clearXXX
函数不会中止当前正在运行的函数,它们只是从异步队列中删除函数,因此它们永远不会开始运行。 JavaScript总是执行代码来完成它。您不能中断在主线程中运行的代码。