Node.js 使用侦听器和setInterval可能会导致节点内存泄漏

Node.js 使用侦听器和setInterval可能会导致节点内存泄漏,node.js,memory-leaks,listener,setinterval,delay,Node.js,Memory Leaks,Listener,Setinterval,Delay,我写了一个显示传感器信息的程序;然而,两天后,程序主要部分的日期返回两天,显示的传感器读数不再符合实际情况。我正试图找出问题所在,到目前为止,我认为可能是某种内存泄漏。也许是我组织程序的方式导致了这种行为,但我不确定,所以我希望有人能分享他们的观点。我对Node js没有太多经验,所以可能我做错了什么 我正在使用蓝牙传感器,所以我创建了一个使用Noble库的模块。该模块有一个监听器,在计算机每次找到设备时读取传感器数据。我注意到模块和侦听器在两天后工作正常,但我的索引有延迟。在索引部分,我必须通

我写了一个显示传感器信息的程序;然而,两天后,程序主要部分的日期返回两天,显示的传感器读数不再符合实际情况。我正试图找出问题所在,到目前为止,我认为可能是某种内存泄漏。也许是我组织程序的方式导致了这种行为,但我不确定,所以我希望有人能分享他们的观点。我对Node js没有太多经验,所以可能我做错了什么

我正在使用蓝牙传感器,所以我创建了一个使用Noble库的模块。该模块有一个监听器,在计算机每次找到设备时读取传感器数据。我注意到模块和侦听器在两天后工作正常,但我的索引有延迟。在索引部分,我必须通过MQTT发布传感器数据,在这里可以获得不同的值

代码对于文章来说太长了,所以我尽量简化它,只保留关键特性

index.js

const sensorModule = require("./mySensorModule");
sensorModule.readData(macId);
setInterval(() => {
    // Retrieving/Publishing values every two seconds
        let newContent = sensorModule.retrieveValues();
        //Arrange the informattion and include the date
        let measuringValues = createMessage(newContent);
        let measuringValuesTopic = "test"
        mqttModule.publishMessage(measuringValuesTopic, JSON.stringify(measuringValues), false);
      
}, 2000);
const noble = require('noble');
const content = {
  Content01: 80,
  Content02: 20,
  Content03: 3000,
  Content04: 25,
  Content05: 80,
  Content06: 10
};
module.exports = {

  readData: function (macId) {

    noble.on('discover', function (peripheral) {
      //Read data
      let sensorData = peripheral.advertisement.manufacturerData;
      console.log("Date: ", moduleDate);
      console.log("SensorData: ", sensorData);
      updateData(sensorData)
    });

    function updateData(sensorData) {
      content.Content01 = sensorData.data.humidity;
      content.Content02 = sensorData.data.temperature;
      content.Content03 = sensorData.data.pressure;
      content.Content04 = sensorData.data.accelerationX;
      content.Content05 = sensorData.data.accelerationY;
      content.Content06 = sensorData.data.accelerationZ;

      //Stop and restart of the scanning necessary because of the hardware 
      noble.stopScanning();
      setTimeout(() => {
        console.log("Scanning restarted");
        noble.startScanning([], true);
      }, 6000);
    }

  },

  retrieveValues: function () {
    let measuringValueObject = content;
    return measuringValueObject;
  }

}; 
mySensorModule.js

const sensorModule = require("./mySensorModule");
sensorModule.readData(macId);
setInterval(() => {
    // Retrieving/Publishing values every two seconds
        let newContent = sensorModule.retrieveValues();
        //Arrange the informattion and include the date
        let measuringValues = createMessage(newContent);
        let measuringValuesTopic = "test"
        mqttModule.publishMessage(measuringValuesTopic, JSON.stringify(measuringValues), false);
      
}, 2000);
const noble = require('noble');
const content = {
  Content01: 80,
  Content02: 20,
  Content03: 3000,
  Content04: 25,
  Content05: 80,
  Content06: 10
};
module.exports = {

  readData: function (macId) {

    noble.on('discover', function (peripheral) {
      //Read data
      let sensorData = peripheral.advertisement.manufacturerData;
      console.log("Date: ", moduleDate);
      console.log("SensorData: ", sensorData);
      updateData(sensorData)
    });

    function updateData(sensorData) {
      content.Content01 = sensorData.data.humidity;
      content.Content02 = sensorData.data.temperature;
      content.Content03 = sensorData.data.pressure;
      content.Content04 = sensorData.data.accelerationX;
      content.Content05 = sensorData.data.accelerationY;
      content.Content06 = sensorData.data.accelerationZ;

      //Stop and restart of the scanning necessary because of the hardware 
      noble.stopScanning();
      setTimeout(() => {
        console.log("Scanning restarted");
        noble.startScanning([], true);
      }, 6000);
    }

  },

  retrieveValues: function () {
    let measuringValueObject = content;
    return measuringValueObject;
  }

};