我正在使用 javascript 定期发送一系列请求(每 5 毫秒
)。
我尝试使用 setTimeout
和 sleep 函数
,但它们都没有准确的时间。
他们确保时间间隔是>= 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/