gpt4 book ai didi

node.js - 如何在 node.js 中创建可中断循环

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:03 24 4
gpt4 key购买 nike

免责声明:我是 Node.js 新手,以下描述可能很长......

我目前正在尝试自学 Node.js 以完成一个我想要完成的小项目。该项目的想法如下:RaspberryPI 运行一个 Node.js 应用程序,它允许我控制 RGB LED 灯条的颜色。应用程序应该能够设置静态颜色并运行平滑改变颜色的色轮。

我现在的想法是创建几个 Node.js 脚本:

  1. 执行客户端通信、设置静态颜色或能够启动色轮的“ Controller ”
  2. 每个运行色轮的“客户端脚本”。至多其中一个会“活着”,由“ Controller ”启动/停止

我已经能够创建一个小脚本来 fork 另一个脚本,并且能够使用 child.send 停止该脚本,如下所示:

controller.js

var fork = require('child_process').fork,
test2 = fork(__dirname + '/test2.js');

setTimeout(function() { test2.send({func: 'quit'}); }, 5000);

这会 fork test2.js 脚本并在 5 秒后发送一条 quit 消息以退出 test2.js

test2.js

function runLoop()
{
console.log("Hello");
setTimeout(runLoop, 1000);
}

process.on('message', function(m) {
if (m.func === 'quit')
{
process.exit(0);
}
});

setTimeout(runLoop, 1000);

此“客户端脚本”每秒打印“Hello”,直到 Controller 发送quit 消息。

这工作得很好 - 5 秒后脚本正常完成。

我现在的问题是:如果我实现一个色轮,我将需要一个可能无限循环来改变 LED 灯带的颜色。上面的(当然有更短的定时器值 - 我在这里需要 10 毫秒)是实现可中断循环的可行方法还是有一些我还不知道的更简洁的机制?

最佳答案

如果您正在使用 setTimeout,您甚至不需要 fork 一个新进程。以下是我如何编写您的示例:

var ntrvl = setInterval(function() { console.log('Hello'); }, 1000);
setTimeout(function() { clearInterval(ntrvl); }, 5000);

...非常简单。使用 setTimeoutsetInterval,您使用的是异步函数,因此不会阻塞事件循环。当计时器启动时,它会运行您的代码,然后等待下一个事件。您应该能够控制所有“客户端”,您将拥有比实际需要更多的带宽,所有这些都以这种方式同时在同一进程中进行。

您需要注意的是您没有阻止脚本。如果您尝试同步执行任何操作(这意味着脚本将在执行下一个命令之前等待操作完成),那么您需要确保它快速运行。如果您必须同步运行处理器/时间密集型任务,那么您就需要 fork 一个新进程。

关于node.js - 如何在 node.js 中创建可中断循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21411601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com