在Javascript中使用对象数组的范围问题

时间:2017-04-11 16:15:14

标签: javascript

我的应用程序后端有一个函数,目的是返回与特定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
})

1 个答案:

答案 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);
});