首页 > 解决方案 > 准确的javascript睡眠功能

问题描述

我正在使用 javascript 定期(每5 ms)发送一个请求。

我尝试使用setTimeoutand sleep function,但它们都没有准确的时间。

他们确保时间间隔是>= 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);
    }
}

标签: javascriptsettimeoutsleep

解决方案


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

此外,JavaScript 是单线程的,它与事件循环系统一起工作,异步任务(如 setTimehout、xhr 回调、点击侦听器等)只有在当前所有代码完成后才会执行。例如,如果您有:

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

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


推荐阅读