在 JavaScript 函数中使用带有“if”条件的 SetInterval()

3
我希望能够使用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");
    }
}      

有没有实现这个的方法?

你需要明确你是想在条件为真时设置间隔还是只想在条件为真时执行它。这是两件不同的事情。 - Dellirium
我想执行它。感谢@Dellirium的澄清。 - Phillip Musumba
只需在间隔上调用函数,setInterval(view_stack, 1000);您的函数检查堆栈大小是否存在,并根据情况执行其中之一,您只需要调用它即可。 - Dellirium
3个回答

8
让您的函数在无需操作时什么也不做,这样您可以保持间隔运行。实际上,您的代码已经写成了这样,我会重新排列它:
function view_stack(){
    if(my_stack.size() === 0) return;
    document.getElementById("stack_visual").innerHTML = my_stack.view();
}

setInterval(view_stack, 1000);

更优雅的解决方案是基于事件的,即每当my_stack发生变化时,更新视图。

2
您可以在setInterval函数中添加if语句,如下所示:
setInterval(function() {
  if(my_stack.size() > 0) {
    view_stack();
  }
}, 1000/60);

所以,只有当my_stack.size() > 0时,它才会调用view_stack()函数。
注意,setInterval()每秒触发60次。

1

您可以在 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”时才能工作,并且仍然可以控制其工作节奏。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接