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
,它的使用方式没有意义。
我有这个事件,外部进程每 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
,它的使用方式没有意义。