使用随机间隔停止并启动settimeout函数

时间:2017-03-28 17:16:39

标签: javascript

我需要一个能够在一定范围的秒之间以随机间隔重复自我的功能。

我发现这个我需要什么。 javascript setinterval with random time

function myFunction() {
  var min = 5,
  max = 10;

  //Generate Random number between 5 - 10
  var rand = Math.floor(Math.random() * (max - min + 1) + min);
  alert('Wait for ' + rand + ' seconds');
  setTimeout(myFunction, rand * 1000);
}

myFunction()

我现在遇到的问题是如何打破这个功能来停止/启动它?

4 个答案:

答案 0 :(得分:1)

将其封装到一个对象中,该对象会将setTimeout的结果保存在属性中,因此您可以在其上调用clearTimeout()



function RandomTimeout(min, max, callback) {
  this.min = min;
  this.max = max;
  this.callback = callback;
  var self = this;
  function repeat() {
    var rand = Math.floor(Math.random() * (max - min + 1) + min);
    console.log('Wait for ' + rand + ' seconds');
    self.timer = setTimeout(function() {
      callback();
      repeat();
    }, rand * 1000);
  }
  this.clear = function() {
    console.log("Stopping");
    clearTimeout(this.timer);
  }
  // Start the initial iteration
  repeat();
}

var randTimer = new RandomTimeout(2, 5, function() {
  console.log("Beep");
});

// Stop it in 15 seconds
setTimeout(function() {
  randTimer.clear();
}, 15000);




与定时器的全局变量的答案不同,这允许您运行多个随机定时器。

答案 1 :(得分:0)

可能会帮助你

var handle;
function start() {
    var min = 5,
    max = 10;
    var rand = Math.floor(Math.random() * (max - min + 1) + min);
    handle = setTimeout(myFunction, rand * 1000);
}

function stop() {
    clearTimeout(handle);
}

function myFunction() {
    //Your code
}

答案 2 :(得分:0)

您可以使用clearTimeout,传递setTimeout返回的令牌,以停止随机通话。

在下面的示例实现中,我将两个函数命名为play(min, max)pause



var token

function play (min, max) {
  action()
  token = setTimeout(
    play, Math.floor(Math.random()*(max - min) + min),
    min, max
  )
}

function pause () {
  clearTimeout(token)
}

function action () {
  console.log('Example function')
}


play(500, 5000)

// Pause after one minute
setTimeout(pause, 60000)




答案 3 :(得分:0)

我正在向服务器发送一条短信,查看邮件的内容,看看邮件中是否有某个命令。

if(msg.indexOf('addbot') > -1){
        addBotToOnlineListTimer = true;
        addBotToOnlineList();
        return;
        }

    if(msg.indexOf('stopaddbot') > -1){
        addBotToOnlineListTimer = false;            
        return;
        }


function addBotToOnlineList() {
if (addBotToOnlineListTimer == true) {
var min = 5,
max = 10;
var rand = Math.floor(Math.random() * (max - min + 1) + min); //Generate 
Random number between 5 - 10
alert('Wait for ' + rand + ' seconds');
setTimeout(myFunction, rand * 1000);
}else{
return;
}
}

如您所见,第一个总是评估为真。

抱歉打扰了你们所有人。 ;)