我想继续使用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");
}
}
有没有办法实现它?
答案 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”且仍可以控制其工作节奏的情况下才起作用。