javascript - 如何在阻塞的nodejs中创建 sleep /延迟?

标签 javascript node.js sleep blocking timedelay

我目前正在尝试学习 nodejs,我正在做的一个小项目正在编写一个 API 来控制一些联网的 LED 灯。

控制 LED 的微处理器有一个处理延迟,我需要将发送到微 Controller 的命令间隔至少 100 毫秒。在 C# 中我习惯只调用 Thread.Sleep(time),但我在 node 中没有找到类似的功能。

我在 node 中找到了几个使用 setTimeout(...) 函数的解决方案,但是,这是异步的,不会阻塞线程(这是我在这种情况下需要的)。

有人知道阻塞 sleep 或延迟功能吗?最好是不只是旋转 CPU,并且精度为 +-10 毫秒的东西?

最佳答案

Node 本质上是异步的,这就是它的优点,所以你真的不应该阻塞线程,但由于这似乎是用于控制 LED 的项目,我还是会发布一个解决方法,即使它是不是一个很好的,不应该使用(说真的)。

while循环会阻塞线程,所以你可以创建自己的 sleep 函数

function sleep(time, callback) {
    var stop = new Date().getTime();
    while(new Date().getTime() < stop + time) {
        ;
    }
    callback();
}

用作

sleep(1000, function() {
   // executes after one second, and blocks the thread
});

我认为这是阻塞线程(原则上)的唯一方法,使其在循环中保持忙碌,因为 Node 没有内置任何阻塞功能,因为它会破坏异步行为的目的。

关于javascript - 如何在阻塞的nodejs中创建 sleep /延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20967006/

相关文章:

JavaScript 函数指针作用域

linux - 进程会在抢占式内核中失去唤醒机会吗?

node.js - 如何更新模型? .updateAttributes 不是函数

javascript - 如何将函数的结果从外部 javascript 脚本返回到 pug 文件?

java - 创建一个循环之间间隔一秒的循环 [处理代码中的异常]

php - 成功后立即需要 INSERT 时,PHP 是否应该在 MySql Insert 之后休眠?

javascript - 使用 jQuery 单击移动按钮

javascript - Three.js 导入的 JSON 模型不接收/转换阴影

javascript - HTML Canvas 缩放至图表上的区域

node.js - 如何处理 Dockerfile for dev/prod 的差异