Javascript 避免设置间隔/设置超时?
我有以下问题:在使用Javascript 避免设置间隔/设置超时?,javascript,settimeout,setinterval,Javascript,Settimeout,Setinterval,我有以下问题:在使用setInterval()和setTimeout()的函数中,我以I中的增量无休止地重复一个操作。由于setInterval或setTimeout的延迟(我认为是后者),在脚本停止正常工作一段时间后,几个任务将同时发生 该脚本在WhatsApp网站上使用,点击前16个联系人,每个联系人都检查在线状态。如果联系人在线,它会打印日志。问题如下:在aomw时间(3h左右)之后,在旧函数完成之前,间隔会自动重复。所以我得到14,1,15,2,16,3,1,4。。。而不是1,2,3,5
setInterval()
和setTimeout()
的函数中,我以I
中的增量无休止地重复一个操作。由于setInterval或setTimeout的延迟(我认为是后者),在脚本停止正常工作一段时间后,几个任务将同时发生
该脚本在WhatsApp网站上使用,点击前16个联系人,每个联系人都检查在线状态。如果联系人在线,它会打印日志。问题如下:在aomw时间(3h左右)之后,在旧函数完成之前,间隔会自动重复。所以我得到14,1,15,2,16,3,1,4。。。而不是1,2,3,5
setInterval(function () {
function writeNext(i) {
if (i == 17)
return;
setTimeout(function () {
writeNext(i + 1);
selectContact(`${i}`)
if (document.getElementsByClassName("O90ur")[0] !== undefined) {
var online = document.getElementsByClassName("O90ur")[0].innerHTML
if (online == "online") {
console.log(`${i-1}`)
};
}
}, 1250);
}
writeNext(1);
}, 20000);
setTimout
的计时器非常接近20000/17
。如果递归计时不精确,您将开始看到重叠,在所有17个旧超时完成之前,下一个setInterval
开始调用新超时。javascript中的计时器也不能保证精确到高分辨率
如果您只想在循环中连续运行,请考虑使用<代码> SETIFATION<代码>,计算<代码> I% 17 。例如:
设i=1
setInterval(函数(){
//用“我”来做事`
控制台日志(i)
i=i%17+1
}, 400);
它将更容易调试和理解,并且不会有任何重叠的机会。
问题出在哪里?@Karan它是递归的:writeNext(i+1)
每20秒,您将创建一个新的writeNext()
函数,它调用自己,调用自己,…您需要解释“脚本停止正常工作”的含义。实际问题是什么?你想做什么。它将帮助人们回答这个问题better@shinobi我更新了描述。谢谢:)