我遇到以下问题:在使用setInterval()
和setTimeout()
的函数中,我不断地重复执行以i
为增量的动作。由于setInterval或setTimeout的延迟(我认为是后者),在脚本停止正确运行一段时间后,将同时执行多个任务。
该脚本在WhatsApp Web上使用,并单击前16个联系人,以每个检查在线状态。然后,如果联系人在线,它将打印日志。问题如下:在预设置时间(3小时左右)之后,该间隔会在旧功能完成之前重复其自身。所以我得到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);
答案 0 :(得分:0)
您的ch
计时器非常接近setTimout
。如果递归的时间不精确,您将开始看到重叠,在所有旧的17个超时完成之前,下一个20000 / 17
开始调用新的超时。另外,JavaScript中的计时器也不能保证精确到高分辨率。
如果您只希望某事物连续循环运行,请考虑仅使用setInterval
并计算setInterval
。例如:
i % 17