2017-02-21 14 views
0

Мне просто интересно, что я делаю что-то неправильно. Я сохранить данные в Монго, как это:Mongoose данные с сервера (Nodejs) не отображаются/.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. Теперь, когда я положил $timeout из 10 вокруг моего console.log:

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

все работает отлично. Это означает, что мои данные устанавливаются слишком поздно. Есть ли что-то, что я не делаю/делаю неправильно?

+0

где вы используете 'console.log (controller.userAdditionalData);'? –

+0

вне моего .get(), но он определен ранее в контроллере. Таким образом, в основном он возвращает пустой массив. –

ответ

1

Это парадокс асинхронности в JavaScript. Если вы делаете асинхронный вызов, а внешний - журналом, возможно, печатает undefined, потому что асинхронный вызов не завершен. Подождите асинхронного вызова с обещанием или несколькими обещаниями, если в цикле, когда обещание закончится, вы можете зарегистрировать это значение или использовать его.

+0

Спасибо, взял меня на то, чтобы понять это, но, в конце концов, сделал. –

 Смежные вопросы

  • Нет связанных вопросов^_^