如何在Node.JS中编写异步While循环

时间:2013-09-23 20:41:28

标签: node.js asynchronous while-loop nonblocking pid

我正在编写一个node.js应用程序,以帮助自动化我的一些家庭啤酒厂。我使用的模块之一是PID算法来控制输出,以便它们保持某些设定点。我目前通过while循环执行此操作,但我认为此代码将被阻止。任何使这更有效和异步的帮助将非常感激。这是我的控制循环:

device.prototype.pid_on = function(){
    while(this.isOn){
        this.pid.set_target(this.target); // make sure that the setpoint is current
        var output_power = this.pid.update(this.current_value); // gets the new output from the PID
        this.output.set_power(output_power);
    };
};

为了便于阅读,我稍微改了一下,但基本上就是这样。它将循环,调整输出,然后反馈新的输入值。我希望循环继续运行,直到设备关闭。

显然,我需要将其设置为非阻塞,以便在pid运行时我可以继续控制其他设备。

目前,我只称相当于device.pid_on();在我的代码中。

我有一个想法是使用空回调,这会使这种非阻塞吗?

device.prototype.pid_on(calback){
    while (this.isOn){...};
    callback();
};

//call later in code
device.pid_on(function(){});

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

最好避免使用while循环。

device.prototype.pid_on = function() {
  var that = this;
  if ( this.isOn ) {

    ... do stuff

    process.nextTick(function() {
      that.pid_on();
    });
  }
};

device.prototype.pid_on = function() {
  var that = this;
  if ( this.isOn ) {

    ... do stuff

    setTimeout(function() {
      that.pid_on();
    }, 0);
  }
};