清除所有运行间隔

时间:2016-02-08 12:17:36

标签: javascript node.js setinterval clearinterval

我试图使用相同的ID同时清除所有间隔。

这样做的原因是多个代理可以有来自它们的调用,因此它可以正常工作但是当涉及多个代理/间隔时,间隔不会被清除,并且据我所知,clearInterval只会清除最后一个间隔

是否可以使用相同的ID同时清除所有间隔?或者只是清除所有间隔?

我查看了有关同一主题的其他问题,但对我没有用,并想知道是否有最新的处理方法。

基本代码理念:

var extenArray = [];

//Passport.js
app.get('/index', checkLoggedIn, function (req, res) {
    res.render('index', {
      isAuthenticated : req.isAuthenticated(),
      user : req.user
    });
    if(extenArray.length > 0){ 
      intervalId = setInterval(bridgeCall, 10000);
      console.log("Running");
    }
  });

  function bridgeCall() {
    if (extenArray.length > 0) {
       console.log("Begin!")
       console.log("value removed from array");
    } else {
      error = ("No extensions left to dial");
      Error();
      if(extenArray.length < 1){
      clearInterval(intervalId);
      console.log("Cleared Interval")
      }
    }
  }

每次调用扩展名时,都会从数组中删除它,但我希望尽可能保留代码示例,但如果需要,可以将其充实。

有没有办法同时清除所有具有相同ID的间隔?

1 个答案:

答案 0 :(得分:0)

感谢@JaromandaX的建议,我配置了我的代码,它根据建议工作,将所有的间隔ID保存在一个数组中。

对给定的代码示例进行了修改:

var extenArray = [];
var interVal = [];

//Passport.js
app.get('/index', checkLoggedIn, function (req, res) {
    res.render('index', {
        isAuthenticated : req.isAuthenticated(),
        user : req.user
    });
    if (extenArray.length > 0) {
        intervalId = setInterval(bridgeCall, 10000);
        interValArray.push(intervalId);
        console.log("Running");
    }
});

function bridgeCall() {
    if (extenArray.length > 0) {
        console.log("Begin!")
        console.log("value removed from array");
    } else {
        error = ("No extensions left to dial");
        Error();
        if (extenArray.length < 1) {
            for (i = 0; i < interValArray.length; i++) {
                clearInterval(interValArray[i]);
                console.log("Cleared Interval")
            }
        }
    }
}