2017-02-21 58 views
0

我只是想知道如果我做错了什么。我将数据保存到蒙戈是这样的:从服务器(Nodejs)的Mongoose数据不显示/ .get()太晚

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。现在,当我把10一个$timeout在我的console.log:

$timeout(function(){ 
    console.log(controller.userAdditionalData); 
}, 10); 

一切工作正常。这意味着我的数据设置得太晚了。有没有我不做/做错的事情?

+0

你在哪里使用'console.log(controller.userAdditionalData);'?我的.get()之外的 –

+0

,但它在控制器的早期定义。所以基本上它返回一个空数组。 –

回答

1

这是因为JavaScript中的异步范例。如果您进行异步调用并在外部创建日志,则可能会打印未定义的内容,因为异步未完成。如果在循环中,承诺结束时等待承诺或多个承诺的异步调用,那么您可以记录该值或使用它。

+0

谢谢,花了我一段时间才弄明白,但终于做到了。 –

相关问题