Javascript 如何停止具有延迟的循环以继续另一个循环

Javascript 如何停止具有延迟的循环以继续另一个循环,javascript,node.js,Javascript,Node.js,我试图让两件事同时发生,但只允许其中一件。如果已经发生了什么事情,我需要能够完全停止,让另一个接管。以下是我的例子: 单击第一个按钮,它将console.log(“first”)10次,延迟500毫秒。当您单击第二个按钮时,它应该取消第一个按钮并启动console.log(“第二个”),而不会被中断(除非您单击第一个按钮) 我该怎么做?我需要延迟循环,并且我需要一个函数来完成此操作(因此每个按钮都没有很多if语句,因为有很多按钮)。如果调用log,则需要存储计时器id并清除它: var log

我试图让两件事同时发生,但只允许其中一件。如果已经发生了什么事情,我需要能够完全停止,让另一个接管。以下是我的例子:

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


我该怎么做?我需要延迟循环,并且我需要一个函数来完成此操作(因此每个按钮都没有很多if语句,因为有很多按钮)。

如果调用
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);
}

如果调用
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);
}

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


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


也许能帮上忙,也许能帮上忙,真奇怪。我以前做过,但没用。抱歉,我不小心写了clearInterval。该死,真奇怪。我以前做过,但没用。抱歉,我不小心写了clearInterval。该死。
var timer;
function log(...)
    clearTimeout(timer);
    (function myLoop(i) {