我需要一个能够在一定范围的秒之间以随机间隔重复自我的功能。
我发现这个我需要什么。 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()
我现在遇到的问题是如何打破这个功能来停止/启动它?
答案 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;
}
}
如您所见,第一个总是评估为真。
抱歉打扰了你们所有人。 ;)