使用 nodejs 同时做两件事

阿契尔·沃尔卡特

我正在使用 socket.IO 创建一个 nodejs 应用程序,用于一些家庭自动化。在 app.js 中,我从工作正常的界面接收调用,我将这些调用发送到另一个文件/树莓派。这也很好,对于基本的事情,比如:打开/关闭,改变颜色等。我创建了这个fade()函数,它在 LED 颜色之间淡入淡出,当我调用这个函数(它应该保持循环)时,它只会循环,并停止接收其他套接字调用。

我只需要一种方法来同时运行该fade()函数,或者另一种(更好?)方法。

在我的代码下面:

let Gpio = require('pigpio').Gpio;
let socket = require('socket.io-client')('http://localhost:8080');
let delay = require('delay');
let ledRed = new Gpio(27, {mode: Gpio.OUTPUT});
let ledGreen = new Gpio(17, {mode: Gpio.OUTPUT});
let ledBlue = new Gpio(22, {mode: Gpio.OUTPUT});

let fadeState = false;

socket.on('fadeClient',function(data){
    if (fadeState === false){
        fadeState = data;
       // fade()
    }
    console.log("fade " + data);
    fadeState = data;
    console.log("data");
});

function setRGBVal(red, blue, green){
    // console.log('red: '  +red);
    // console.log('blue: ' +blue);
    // console.log('green: ' +green);

    ledRed.pwmWrite(0);
    ledGreen.pwmWrite(0);
    ledBlue.pwmWrite(0);
    ledRed.pwmWrite(Math.round(red));
    ledGreen.pwmWrite(Math.round(blue));
    ledBlue.pwmWrite(Math.round(green));
}

function fade(){
    console.log("inFade");
    while(fadeState === true) {
        console.log(fadeState)
        for (i = 0; i < 255; i++) {
            setRGBVal(i, 0, 0);
            delay(500);
            if (fadeState === true){
                break;
                console.log("piemel");
            }
        }
        for (i = 0; i < 255; i++) {
            setRGBVal(0, i, 0);
            delay(500);
            if (fadeState === true){
                break;
                console.log("piemel");
            }
        }
        for (i = 0; i < 255; i++) {
            setRGBVal(0, 0, i);
            delay(500);
            if (fadeState === true){
                break;
                console.log("piemel");
            }
        }
    }
};
activout.se

正如您所发现的,Node.js 是单线程的,因此 delay() 将阻塞整个应用程序。使用 setTimeout() 代替,就像在前端 Web 应用程序中一样。像这样的东西:

fadeNext(0);

function fadeNext(i) {
  setRGBVal(i, 0, 0);
  if (i < 255) {
    setTimeout(function() { fadeNext(i+1); }, 500);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用ncurses同时打印两件事

来自分类Dev

如何使用UIColorPickerViewController更改两件事的颜色

来自分类Dev

使用 LinkText 一次搜索两件事

来自分类Dev

如何使用条件检查两件事,当两件事为真时,它会提供信息

来自分类Dev

使用catimg并排显示两件事(例如neofetch中的内容)

来自分类Dev

方案中的条件谓词后如何使用两件事?

来自分类Dev

在 Raspberry Pi 上通过 GPIO SPI 连接使用两件事

来自分类Dev

如何在 Python 中使用 Regex 提取两件事?

来自分类Dev

三元:做两件事

来自分类Dev

在球拍中为“循环”做两件事

来自分类Dev

如何使一个按钮做两件事?

来自分类Dev

使button.click事件做两件事

来自分类Dev

用命令的输出做两件事

来自分类Dev

我没办法做两件事

来自分类Dev

在Linux上同时安装两件事

来自分类Dev

悬停时显示两件事

来自分类Dev

两个按钮,用Jquery做两件事

来自分类Dev

我试图在javascript中做一个简单的按钮,做两件事

来自分类Dev

Autoit make按钮可以做两件事。彼此一击

来自分类Dev

一种API方法可做两件事;创建API时的好习惯吗?

来自分类Dev

从数据表中提取两件事的总和

来自分类Dev

形式相互依赖的两件事

来自分类Dev

当鼠标悬停在Flash中时,如何使这两件事同时发生

来自分类Dev

发布者等待消费消息,同时它应该做两件事(发布和订阅订阅者的回复)。)

来自分类Dev

正则表达式:如何一次过滤两件事

来自分类Dev

AngularJS-动态更改类并加载JSON-确实有两件事

来自分类Dev

Lua-如何在一个打印语句中打印两件事

来自分类Dev

FILE vs HANDLE-这两件事有什么区别

来自分类Dev

如何在文件中对此(两件事)进行grep?

Related 相关文章

热门标签

归档