为了记录,我正在使用Node API进行大量编程。无论如何,当我运行我的代码时,我得到一个内存泄漏错误,说有11个发射器打开。如果是这种情况,我将如何阻止我的程序打开几个getData实例?如果我无法阻止这种情况,是否有一种粗略的方法来删除我不希望发出的实例?我试图每50毫秒运行一次该功能。 这是我的代码:
setInterval(getData, 100);
function getData() {
"use strict";
//When the serialport opens:
serialport.on("open", function() {
serialport.on("data", function(data) {
//Takes the current string value, turns it into an integer, then stores it in nCurrentValue
runData( parseInt(data.toString()) );
});
});
}
getData();
function runData(value) {
"use strict";
socket.emit('NewData',value);
console.log(value);
}
答案 0 :(得分:1)
您可以通过提取getData之外的事件触发器来实现。据我所知,nodejs是事件驱动的,所以你应该只连接onopen / ondata一次,然后所有的连接都会通过你的函数调用。
我猜您只需要执行以下操作:
serialport.on("open", newConnection);
serialport.on("data", newDataReceived);
function newConnection() {
// do something with the connection...
}
function newDataReceived(data) {
// do something with the data received
}
我猜测,当连接关闭时,串口也会发送信息,所以你可以添加以下内容:
serialport.on("close", closeConnection);
function closeConnection() {
// close the connection internally afterwards
}
虽然最后一部分是一个纯粹的猜测...
在这种情况下,nodejs应该在建立新连接时触发open事件,然后在收到数据时触发数据事件。如果要检查用于序列端口的库,可能会有如何使用库的指南