我正在编写一个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(){});
感谢您的帮助!
答案 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);
}
};