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我更新了描述。谢谢:)