2015-03-02 62 views
1

我有这个事件是由外部进程触发一次,每2秒(这是一个串行口接收数据):JS - 火灾事件中的最大每x秒一次

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变量)。

+1

设置一个全局变量来保存当前时间,然后增加500秒,并请求检查时间是否大于它,然后再增加500秒时间。 – Rooster 2015-03-02 19:34:55

回答

0

存储您的上传数据,给他们每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); 
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,这是没有意义的使用方式。