如何停止循环延迟以继续另一个

时间:2017-03-29 17:26:02

标签: javascript node.js

我试图让两件事同时发生,但只允许其中一件。如果已经发生了某些事情,我需要能够完全阻止它并让另一个接管。这是我的例子:

https://jsfiddle.net/mortenmoulder/5eceLvgu/

function log(text, interval, amount) {
    (function myLoop(i) {
        timer = setTimeout(function() {
            console.log(text);
            if (--i) myLoop(i);
        }, interval)
    })(amount);
}

$("#first").on("click", () => log("first", 500, 10));
$("#second").on("click", () => log("second", 500, 10));

点击第一个按钮,它将console.log("first") 10次,延迟时间为500毫秒。当您单击第二个按钮时,它应该取消第一个按钮并启动console.log("second")而不会被中断(除非您单击第一个按钮)。

我该怎么做?我需要延迟循环,我需要有一个函数来执行此操作(因此,每个按钮的if语句不多,因为有很多按钮)。

2 个答案:

答案 0 :(得分:2)

如果拨打log

,您需要存储计时器ID并清除它
var logTimer;

function log(text, interval, amount) {
  clearTimeout(logTimer);
  (function myLoop(i) {
    logTimer = setTimeout(function() {
      console.log(text);
      if (--i) myLoop(i);
    }, interval)
  })(amount);
}

答案 1 :(得分:0)

您已经存储了计时器,因此您可以清除其超时。

https://jsfiddle.net/5eceLvgu/1/

var timer;
function log(...)
    clearTimeout(timer);
    (function myLoop(i) {