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

我正在编写一个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(){});

感谢您的帮助!

最佳答案 最好避免使用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);
  }
};
点赞