javascript - 准确的javascript sleep 功能

标签 javascript settimeout sleep

我正在使用 javascript 定期发送一系列请求(每 5 毫秒)。

我尝试使用 setTimeoutsleep 函数,但它们都没有准确的时间。

他们确保时间间隔是>= 5ms而不是== 5ms。 有什么想法吗?

看来这在javascript中很难实现甚至不可能!!

这是我使用的代码:

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}



async function sendRequest(){ 
    var i;
    for (i=1; i<= numberOfRequests; i++){
        // send my i^th request here
        await sleep(5);
    }
}

最佳答案

没有任何方法可以在任何编程语言中提供准确的超时,因为它们存在于通用的多程序操作系统中。发生这种情况是因为操作系统将其时间片分配给特定进程的确切时刻是无法预测的。

此外,JavaScript 是单线程的,它与 event loop system 一起工作。 ,而异步任务(如setTimehout、xhr回调、点击监听器等)只有在当前代码全部执行完后才会执行。例如,如果您有:

setTimeout(() => console.log('hello world'), 500);
for (let i = 0; i<1E100; i++) {
  console.log(Math.sqrt(i));
}

Hello world只有在所有计算完成后才会打印出来。

关于javascript - 准确的javascript sleep 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56472867/

相关文章:

javascript - jQuery:循环具有不同超时值的循环

安卓游戏循环休眠

c++ - 休眠生成的线程

java线程 sleep 解析和等待同步块(synchronized block)

javascript - Array.prototype.splice 的意外行为

javascript - 为什么这个回调函数没有添加bind.(this)?

Javascript setTimeout 计时可靠性

jquery - 在非事件选项卡中实时暂停或运行 setInterval 函数

javascript - 查找对象键是否在数组中 javascript

javascript - 无法在 iPhone/iPod touch 的 Safari iOS 7 中隐藏导航栏