如何从JSLinter中删除我的代码以消除此错误? 我尝试将整个函数移到var中,但代码在之后无法运行。
for (i = 0; i < timeDifference; i++) {
timestamp ++;
console.log(timestamp);
energyDatum.find({timestamp: timestamp}).toArray(function(err, result) {
var data = {};
result.forEach(function(element) {
data[element.deviceId] = element;
});
var roomRawData = [];
mappings.forEach(function(room) {
var hash = {};
hash.floor = room.floor;
hash.name = room.name;
hash.room_type = room.room_type;
hash.energy_ac = sumApplianceEnergy('energy_ac', room, data);
hash.energy_light = sumApplianceEnergy('energy_light', room, data);
hash.energy_socket_1 = sumApplianceEnergy('energy_socket_1', room, data);
hash.energy_socket_2 = sumApplianceEnergy('energy_socket_2', room, data);
hash.energy_socket_3 = sumApplianceEnergy('energy_socket_3', room, data);
hash.energy_total = hash.energy_ac + hash.energy_light + hash.energy_socket_1 + hash.energy_socket_2 + hash.energy_socket_3;
hash.timestamp = timestamp;
roomRawData.push(hash);
});
roomRaw.insert(roomRawData, {w:1}, function(err, result) { console.log('done'); });
});
lastTimestamp.update({_id: timestampId}, {timestamp: timestamp});
}
答案 0 :(得分:1)
JSLinter显示此消息,因为您的代码存在潜在错误。
看看这一行:
energyDatum.find({timestamp: timestamp}).toArray(...);
这种方法是异步的,对吧?这意味着toArray
方法的回调
在 之后被称为 for
循环完成其迭代,因此timestamp
变量(当你在这个回调中使用它时)没有当前迭代的值,
但它的值增加了timeDifference
次。
要解决此问题,您可以将此回调移动到另一个函数:
var getIterationFunc = function(timestamp) {
return function(err, result) {
var data = {};
// rest of function ...
}
}
然后使用它:
energyDatum.find({timestamp: timestamp}).toArray(getIterationFunc(timestamp));
我认为现在应该修复此错误。希望这会有所帮助。
P.S。抱歉我的英文