我的应用程序后端有一个函数,目的是返回与特定thingID关联的所有传感器。
我通过填充新数组 allSensors 来接近这个,但是当记录在下面时
console.log(allSensors);
res.send(allSensors)
它是一个空数组[]
我还应该注意 sensor 的各个元素正确记录
我已经移动了
console.log(allSensors)
进入 sensor.findOne 循环,并正确打印出元素。
existingThing.sensors.forEach(function (element) {
Sensor.findOne({_id: element._id}, function (err, sensor) {
if(sensor){
// console.log(sensor);
allSensors.push(sensor);
console.log(allSensors); // this works....
}
})
});
有关此行为的任何想法? 感谢
//get all sensors associated with thingid
app.get('/api/things/:thingid/sensor', function (req, res) {
var allSensors = [];
Thing.findOne({
thingID: req.params.thingid
}, function (err, existingThing) {
if (!existingThing)
return res.status(409).send({
message: 'Thing doesnt exist'
});
if (existingThing.sensors.length < 0)
return res.status(409).send({
message: 'No sensors'
});
existingThing.sensors.forEach(function (element) {
Sensor.findOne({_id: element._id}, function (err, sensor) {
if(sensor){
// console.log(sensor);
allSensors.push(sensor);
}
})
});
})
console.log(allSensors); //empty
res.send(allSensors); //empty
})
答案 0 :(得分:0)
安装async库。 (这是一个非常有用的库,如果你不使用它,你可能不得不重新发明它)。然后使用此代码:
async.each(existingThing.sensors, function(element, _cb) {
Sensor.findOne({ _id: element._id }, function(err, sensor) {
if(sensor) {
allSensors.push(sensor);
} _cb();
});
}, function() {
console.log(allSensors);
res.send(allSensors);
});