代码之家  ›  专栏  ›  技术社区  ›  Studento919

清除所有运行间隔

  •  -1
  • Studento919  · 技术社区  · 10 年前

    我试图用同一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 回复  |  直到 10 年前
        1
  •  0
  •   Studento919    10 年前

    感谢@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")
                }
            }
        }
    }