如何在JavaScript中超时中止函数

时间:2016-08-26 20:06:08

标签: javascript node.js

我需要执行一些功能但是如果超时到期我需要中止这个功能。我尝试使用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,但它只是工作检查的一个例子。例如,我应该解析一些大数据,如果不能超时,我需要取消此函数执行并调用其他内容。

2 个答案:

答案 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总是执行代码来完成它。您不能中断在主线程中运行的代码。