1
我在我用來通過LIRC控制空調的Raspberry Pi上構建了我的第一個node.js應用程序。當您想要增加交流單元的溫度時,會調用以下代碼。它每250毫秒發送一次LIRC命令,具體取決於你想增加多少度數。此代碼按預期工作。在Node.js中遞歸setTimeout函數中的錯誤處理
var iDegrees = 5;
var i = 0;
var delay = 250 // The delay in milliseconds
function increaseTemperatureLoop(){
i++;
//lirc_node.irsend.send_once("ac", "INCREASE", function() {});
console.log(i);
// Call the fucntion/loop again after the delay if we still need to increase the temperature
if (i <= iDegrees){
timer = setTimeout(increaseTemperatureLoop, delay);
}
else {
res.json({"message": "Success"});
}
}
// Start the timer to call the recursive function for the first time
var timer = setTimeout(increaseTemperatureLoop, delay);
我很難與node.js的異步特性一起工作。一旦我的遞歸函數完成,我將json返回到瀏覽器,如上面的代碼所示。按照習慣,我覺得我應該在下面的初始函數調用之後返回一行代碼中的json,但顯然這不會等待所有LIRC調用都成功 - 將它放在函數內部看起來很愚蠢:
var timer = setTimeout(increaseTemperatureLoop, delay);
res.json({"message": "Success"});
如果我有一堆其他的東西我LIRC發送完成後,但我想我的JSON發送回瀏覽器之前做什麼?或者,如果該代碼塊引發錯誤...
我的第二個問題是,我如何正確包裝在try/catch中的LIRC調用,然後如果有錯誤,停止遞歸調用,通過錯誤備份,然後通過這個返回給瀏覽器與實際的錯誤消息一起:
res.json({"message": "Failed"});
謝謝你的職位 - 我能得到這個工作。哪裏是我的JSON響應的最佳位置:res.json({「message」:「Success」}); – user1624184
@ user1624184內部完整函數,而不是'console.log'。 –