在 clearInterval 后执行代码

msh*_*ang 5 javascript canvas callback setinterval clearinterval

我有一个setInterval显示动画的循环调用。

当我clearInterval响应用户输入时,队列中可能有一个或多个循环回调。如果我直接在clearInterval语句之后放置一个函数调用,则函数调用首先完成(将某些内容打印到屏幕上),然后执行排队循环回调,删除我想要打印的内容。

请参阅下面的代码。

function loop() {
    // print something to screen
}

var timer = setInterval(loop(), 30);

canvas.onkeypress = function (event) {
    clearInterval(timer);
    // print something else to screen
}
Run Code Online (Sandbox Code Playgroud)

处理这个问题的最佳方法是什么?把延迟放在// print something else to screen? 在循环内进行新打印?

编辑:感谢您的回答。为了将来参考,我的问题是触发额外打印的事件被隐藏在循环中,因此一旦执行,控制权将交还给未完成的循环,然后将其覆盖。干杯。

pim*_*vdb 3

您还可以使用标志来忽略任何排队的函数:

var should;

function loop() {
    if(!should) return; // ignore this loop iteration if said so

    // print something to screen
}

should = true;
var timer = setInterval(loop, 30); // I guess you meant 'loop' without '()'

canvas.onkeypress = function (event) {
    should = false; // announce that loop really should stop
    clearInterval(timer);
    // print something else to screen
}
Run Code Online (Sandbox Code Playgroud)