我正在编写一个基于nodejs的脚本来从树莓派中获取温度读数,并在Sequelize部分遇到一些麻烦,它将传感器添加到数据库中。
ds18x20库使用 sensor.list
来获取连接到raspi的所有传感器。我需要迭代这个列表函数的结果,如果数据库中不存在sensorId
,我需要添加它。
到目前为止,我有以下代码,它检索传感器列表,迭代它们并在数据库中查找它们。
sensor.list(function(e, sensors){
logger.debug("Sensors Found:");
logger.debug(sensors);
for(var i=0; i < sensors.length;i++){
db.Sensor.find({
where: { sensorId: sensors[i] }
}).success(function(s){
if (!s){
##sensors[i] is undefined here
logger.debug('Adding Sensor '+sensors[i]+' To the database as it doesn\'t exist!');
db.Sensor.create({
sensorId: sensors[i],
name: sensors[i]
});
}else{
Sensors.push(s);
}
});
}
});
答案 0 :(得分:1)
问题是,当成功回调开始触发时,我的值为sensors.length
。
你可以像
那样接近它
sensor.list(function(e, sensors){
/* This function returns the function which should
execute after callback with presnt i bound to it */
function GnBindCb(i) {
return function(s) {
if (!s){
##sensors[i] is undefined here
logger.debug('Adding Sensor '+sensors[i]+' To the database as it doesn\'t exist!');
db.Sensor.create({
sensorId: sensors[i],
name: sensors[i]
});
}else{
Sensors.push(s);
}
};
}
logger.debug("Sensors Found:");
logger.debug(sensors);
for(var i=0; i < sensors.length;i++){
db.Sensor.find({
where: { sensorId: sensors[i] }
}).success(GnBindCb(i)());
}
});
&#13;
有关此问题的更多输入,您可以参考this post on Stackoverflow
。