Javascript 为数组中的每个间隔ID再次运行set Interval

Javascript 为数组中的每个间隔ID再次运行set Interval,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,我目前正在数组中存储一组setInterval ID 我最初如何设置间隔: intervalId = setInterval(bridgeCall, 10000); interValArray.push(intervalId); 我当前有一个按钮,可以通过调用此函数停止当前运行的所有间隔: function stopCampaign() { if (interValArray.length > 0) { for (i = 0; i < interVa

我目前正在数组中存储一组setInterval ID

我最初如何设置间隔:

  intervalId = setInterval(bridgeCall, 10000);
  interValArray.push(intervalId);
我当前有一个按钮,可以通过调用此函数停止当前运行的所有间隔:

  function stopCampaign() {
    if (interValArray.length > 0) {
      for (i = 0; i < interValArray.length; i++) {
        clearInterval(interValArray[i]);
        console.log("Stopped");
      }
      error = "Stopped"
        Error();
    } else {
      error = "Nothing Running"
        Error();
    }
  }

可以重新设置间隔/启动它们吗?

除了取消计时器外,不能使用计时器句柄执行任何操作。这一行:

setInterval(interValArray[i],10000);
尝试使用句柄“重新启动”间隔。这根本不受内置计时器的支持。您需要执行与最初启动时相同的操作,然后再次启动

您还没有展示如何首先启动它们,因此我无法建议您如何进行重组以使其能够再次启动,但这里有一个合成示例:

//初始设置
var定时器=[];
对于(变量n=0;n<5;++n){
起始计时器(功能(val){
document.getElementById(“a”+val).innerHTML+=”;
}.bind(null,n),Math.random()*1000);
}
功能起始计时器(f,间隔){
计时器推({
f:f,
间隔:间隔,,
句柄:setInterval(f,interval)
});
}
//三秒钟后阻止他们
setTimeout(函数(){
日志(“暂停…”);
定时器。forEach(函数(定时器){
clearInterval(计时器句柄);
});
}, 3000);
//两秒钟后启动它们
setTimeout(函数(){
日志(“重新启动…”);
定时器。forEach(函数(定时器){
timer.handle=setInterval(timer.f,timer.interval);
});
}, 5000);
//然后在几秒钟后让他们停下来
setTimeout(函数(){
控制台日志(“停止”);
定时器。forEach(函数(定时器){
clearInterval(计时器句柄);
});
}, 7000);

除了取消计时器外,您不能使用计时器手柄执行任何操作。这一行:

setInterval(interValArray[i],10000);
尝试使用句柄“重新启动”间隔。这根本不受内置计时器的支持。您需要执行与最初启动时相同的操作,然后再次启动

您还没有展示如何首先启动它们,因此我无法建议您如何进行重组以使其能够再次启动,但这里有一个合成示例:

//初始设置
var定时器=[];
对于(变量n=0;n<5;++n){
起始计时器(功能(val){
document.getElementById(“a”+val).innerHTML+=”;
}.bind(null,n),Math.random()*1000);
}
功能起始计时器(f,间隔){
计时器推({
f:f,
间隔:间隔,,
句柄:setInterval(f,interval)
});
}
//三秒钟后阻止他们
setTimeout(函数(){
日志(“暂停…”);
定时器。forEach(函数(定时器){
clearInterval(计时器句柄);
});
}, 3000);
//两秒钟后启动它们
setTimeout(函数(){
日志(“重新启动…”);
定时器。forEach(函数(定时器){
timer.handle=setInterval(timer.f,timer.interval);
});
}, 5000);
//然后在几秒钟后让他们停下来
setTimeout(函数(){
控制台日志(“停止”);
定时器。forEach(函数(定时器){
clearInterval(计时器句柄);
});
}, 7000);

函数
setInterval(函数,interval)
返回一个区间ID,当您将它们存储在数组中时,您已经理解了该ID

但是,不能仅使用间隔的ID“重新启动”间隔。必须先清除间隔,然后使用在数组中存储项时使用的初始参数调用
setInterval()

您可以修改数组中的项,以保留重新启动超时所需的所有信息:

var interValArray = [];

nextTimeout = {
  fn: functionNameToCall,
  interval: 10000,
  id: 0
}

nextTimeout.id = window.setInterval(
  nextTimeout.fn, 
  nextTimeout.interval
)

interValArray.push( nextTimeout )
新的
stopCampaign()
将如下所示:

function stopCampaign() {
  if (interValArray.length > 0) {
    for (i = 0; i < interValArray.length; i++) {
      clearInterval(interValArray[i].id);
      console.log("Stopped");
    }
    error = "Stopped"
      Error();
  } else {
    error = "Nothing Running"
      Error();
  }
}
function Campaign() {
  if (interValArray.length > 0) {
    for (i = 0; i < interValArray.length; i++) {
      interValArray[i].id =
        setInterval(interValArray[i].fn,interValArray[i].interval);
      console.log("Start");
    }
    error = "Started"
      Error();
  } else {
    error = "No Agents"
      Error();
  }
}

函数
setInterval(函数,interval)
返回一个间隔ID,当您将它们存储在数组中时,您已经理解了该ID

但是,不能仅使用间隔的ID“重新启动”间隔。必须先清除间隔,然后使用在数组中存储项时使用的初始参数调用
setInterval()

您可以修改数组中的项,以保留重新启动超时所需的所有信息:

var interValArray = [];

nextTimeout = {
  fn: functionNameToCall,
  interval: 10000,
  id: 0
}

nextTimeout.id = window.setInterval(
  nextTimeout.fn, 
  nextTimeout.interval
)

interValArray.push( nextTimeout )
新的
stopCampaign()
将如下所示:

function stopCampaign() {
  if (interValArray.length > 0) {
    for (i = 0; i < interValArray.length; i++) {
      clearInterval(interValArray[i].id);
      console.log("Stopped");
    }
    error = "Stopped"
      Error();
  } else {
    error = "Nothing Running"
      Error();
  }
}
function Campaign() {
  if (interValArray.length > 0) {
    for (i = 0; i < interValArray.length; i++) {
      interValArray[i].id =
        setInterval(interValArray[i].fn,interValArray[i].interval);
      console.log("Start");
    }
    error = "Started"
      Error();
  } else {
    error = "No Agents"
      Error();
  }
}

您的
重复
在哪里?或者在哪里调用?您必须单独跟踪计时器回调函数。间隔ID只是数字;系统没有为您跟踪实际的函数。我没有在任何地方调用
repeat
,也没有在代码中调用,@Pointy关于这样做的任何建议?好吧,不知怎的,您首先成功地调用了
setInterval()
,对吗?执行此操作时,您可以将传递给
setInterval
的函数保存在一个单独的数组中,与存储区间ID的数组平行。您的
repeat
在哪里?或者在哪里调用?您必须单独跟踪计时器回调函数。间隔ID只是数字;系统没有为您跟踪实际的函数。我没有在任何地方调用
repeat
,也没有在代码中调用,@Pointy关于这样做的任何建议?好吧,不知怎的,您首先成功地调用了
setInterval()
,对吗?当您这样做时,您可以将传递给
setInterval
的函数保存在一个单独的数组中,与存储区间ID的数组并行。因此,我只是根据您最初的建议调用了changed,它可以相应地工作,因为我需要它,我将发布如何启动它以清晰明了:
if(interValArray.length>0){for(i=0;i
@Studento919:下次您将无法停止这些操作,因为您没有存储