JS - 每 x 秒最多触发一次事件

JS - Fire event maximum once every x seconds

我有这个事件,外部进程每 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 变量包含最新数据。)

存储您的数据,并每 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);

完全未经测试,但像这样的东西会做你想要的吗?:

(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,它的使用方式没有意义。