2015-03-02 61 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,這是沒有意義的使用方式。