来自服务器(Nodejs)的Mongoose数据没有显示/ .get()太迟了

时间:2017-02-21 06:46:45

标签: angularjs node.js mongodb express mongoose

我只是想知道我做错了什么。我将数据保存到mongo:

router.route('/userAdditionalData')
//updates current user data
.put(function(req, res, next){

    UserAdditionalInfo.findOne({userRef: req.body.userRef}, function(error, foundUser){

        if(error){
            console.log('Error in adding additional User Data: ', error);
            return done(null);
        };

        if(foundUser){

            foundUser.update(req.body, function(error, count){
                res.send(200, foundUser)
            });

        }

        else{

            var addData = new UserAdditionalInfo();

            addData.middleName = req.body.middleName;
            addData.employer = req.body.employer;
            addData.jobDescription = req.body.jobDescription;
            addData.userRef = req.body.userRef;

            addData.save(function(error, data){

                if(error){
                    return res.send(500, error)
                }

                return res.send(200, data);
            });
        }   
    });
})

我得到的数据是这样的:

.get(function(req, res){
    UserAdditionalInfo.find(function(err, data){
        if(err){
            return res.send(500, err);
        }
        return res.send(200, data);
    });
});

在我的角度控制器中,当我使用$ http.get()获取数据时:

$http.get('/api/userAdditionalData').then(function(response){

    console.log('response -> ', response.data[0]);
    controller.userAdditionalData = response.data[0];

});

控制台完美地记录了我的响应,但是当我记录 controller.userAdditionalData 时,我得到undefined。现在,当我在我的console.log上放置$timeout 10时:

$timeout(function(){
    console.log(controller.userAdditionalData);
}, 10);
一切正常。这意味着我的数据设置得太迟了。有什么我不做/做错的事吗?

1 个答案:

答案 0 :(得分:1)

这是因为JavaScript中的异步范例。如果您进行异步调用并在外部创建日志,则可能会打印undefined,因为async未完成。等待带有promise或多个promise的异步调用,如果在循环中,当promise结束时,则可以记录该值或使用它。