在js函数中带有“if”条件的SetInterval()

时间:2017-10-08 11:22:10

标签: javascript jquery

我想继续使用setInterval()调用下面的函数,但前提是if语句中的条件的计算结果为true。 注意:该功能是全局的。

function view_stack(){
    if(my_stack.size() > 0){
        document.getElementById("stack_visual").innerHTML = my_stack.view();
    } else {
        swal("Ohhhh Noes", "There are no items in the stack!", "error");
    }
}      

有没有办法实现它?

3 个答案:

答案 0 :(得分:4)

这样做是为了让你的功能无所事事。这样你就可以简单地保持间隔运行。

实际上你的代码就是这样编写的,我会像这样重新排列:

function view_stack(){
    if(my_stack.size() === 0) return;
    document.getElementById("stack_visual").innerHTML = my_stack.view();
}

setInterval(view_stack, 1000);

更优雅的解决方案是基于事件的,即每当my_stack更改时,都会更新视图。

答案 1 :(得分:1)

您可以在setInterval函数中添加if语句,如下所示:

setInterval(function() {
  if(my_stack.size() > 0) {
    view_stack();
  }
}, 1000/60);

因此,只有my_stack.size() > 0它才会调用view_stack()函数。

注意setInterval()每秒触发60次。

答案 2 :(得分:0)

您可以简单地将函数嵌套在while循环中嵌套的setTimeout中。

function view_stack(){

  while(my_stack.size() > 0){
  
    setTimeout(() => {
    
      document.getElementById("stack_visual").innerHTML = my_stack.view();
    
    ), 1000} //for a second rhythm.
  
  }
  
  swal("Ohhhh Noes", "There are no items in the stack!", "error");

}

通过这种方式,该功能仅在“ true”且仍可以控制其工作节奏的情况下才起作用。