火灾事件最多每x秒发生一次

Fire event maximum once every x seconds

本文关键字:一次 事件 火灾      更新时间:2023-09-26

我有一个外部进程每2秒触发一次的事件(它是一个接收数据的串行端口):

sp.on("data", function (rawData) {
    try {
        data = JSON.parse(rawData);
        var collection = db.get('sensorsCollection');
        collection.insert({
            ...
        });
    } catch (error) {
        debug(error);
    }
});

但我希望每500秒在数据库中只存储一次数据,以避免数据库过载。如何做到这一点?

(注意:我尝试使用underscore.js的函数throttle,但找不到如何将参数传递给throttle中调用的函数,因此无法传递包含最新数据的新data变量。)

完全未经测试,但像这样的东西能满足你的需求吗?:

(function() {
    var collection = db.get('sensorsCollection');
    var data = [];
    sp.on("data", function (rawData) {
        try {
            data.push(JSON.parse(rawData));
        } catch (error) {
            debug(error);
        }
    });
    
    setInterval(function() { // try-catch here too if necessary
        collection.insert(data);  // additional formatting?
        data = [];
    }, 500 * 1000);
}());

编辑使用setTimeout而不是throttle,这在使用方式上没有意义。

存储数据,每500秒发送一次:

var my_datas=[];
sp.on("data", function (rawData){
    try {
      //store the data 
      my_datas.push(rawData);
        });
    } catch (error) {
        debug(error);
    }
});
setInterval(function(){
   for(var i=0, len= my_datas.length; i<len; i++){
        data = JSON.parse(my_datas[i]);
        var collection = db.get('sensorsCollection');
        collection.insert({
            ...
        });
   }
  },500*1000);