javascript - 准确的javascript睡眠功能
问题描述
我正在使用 javascript 定期(每5 ms
)发送一个请求。
我尝试使用setTimeout
and 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);
}
}
解决方案
没有任何方法可以在任何编程语言中提供精确的超时,就像它们存在于通用多道程序操作系统中一样。发生这种情况是因为操作系统将其时间片分配给特定进程的确切时间是不可预测的。
此外,JavaScript 是单线程的,它与事件循环系统一起工作,异步任务(如 setTimehout、xhr 回调、点击侦听器等)只有在当前所有代码完成后才会执行。例如,如果您有:
setTimeout(() => console.log('hello world'), 500);
for (let i = 0; i<1E100; i++) {
console.log(Math.sqrt(i));
}
Hello world
只有在所有计算完成后才会打印。
推荐阅读
- powershell - 尝试/捕获或错误变量并使用
- c# - Xamarin WPF - 按钮按下事件不起作用?
- arrays - 是否有 Google 表格功能允许您对具有相似字段但条件不同的不同数据集进行多次查询?
- build - 为什么 ejabberd 想在 /home 中创建 erlang cookie?#crash:权限问题
- html - 如何在 Wordpress 中格式化视频的窗口大小?
- visual-studio-code - 无法远程 SSH 到 VSCode 上的 Windows 主机
- stream - 如何使用流但仍保留数据而不偏移
- python - 使用 pandas 的 lambda 函数的语法错误
- java - 内容协商。请求、响应支持 JSON 和 XML
- r - {rlang} 的'curly-curly' 操作符 `{{` 是如何实现的?