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

新手上路,请多包涵

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

 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");
    }
}

有什么办法可以实现吗?

原文由 Phillip Musumba 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

让它在无事可做时让你的函数无所事事。这样你就可以简单地保持间隔运行。

实际上你的代码已经是这样写的,我会这样重新排列它:

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

setInterval(view_stack, 1000);

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

原文由 Tomalak 发布,翻译遵循 CC BY-SA 3.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");

}

这样函数只有在“真”时才会工作,并且仍然可以控制它工作的节奏。

原文由 user95739 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题