JS - 每x秒最多一次Fire事件

时间:2015-03-02 19:29:41

标签: javascript javascript-events

我有这个事件,每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中调用的函数,因此我无法&{ #39; t传递包含最新数据的新data变量。)

2 个答案:

答案 0 :(得分:1)

完全没有经过测试,但这样的事情会做你想要的吗?:

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

答案 1 :(得分:0)

存储您的数据,并每隔500秒发送一次: