Использование асинхронности с контроллерами / моделями mongoose

#javascript #node.js #mongodb #express #asynchronous

#javascript #node.js #mongodb #экспресс #асинхронный

Вопрос:

Я могу поместить каждую модель в обратный вызов model, но такой беспорядочный и трудный для чтения. Я нашел npm с именем async, но я понятия не имею, как его использовать.

 User.find({
     "email":req.body.user_email
    }),
    function(err,response){
        if(!err){
            res.json(response);
        }
    })

AnotherModel.find(),
    function(err,response){
        if(!err){
            res.json(response);
        }
    })
  

Я прочитал документ, но я его не понимаю.

 async.parallel([
    function(callback){ ... },
    function(callback){ ... }
], function(err, results) {
    // optional callback
};
  

В конце концов, я хочу, чтобы мне просто нужно было выполнить ОДИН res.json после объединения данных из нескольких моделей и отправки их во внешний интерфейс.

Комментарии:

1. Рассматривали ли вы возможность использования обещаний для этой цели? Ваш код будет намного чище. Проверьте bluebird на наличие узла js, вы можете обещать свои функции и использовать .settle или .props для достижения желаемого.

2. @nmargaritis aysnc также является модулем npm

Ответ №1:

Используйте это так

 async.parallel([
  function(callback) {
    User.find({
        "email": req.body.user_email
      }),
      function(err, response) {
        if (!err) {
          callback(null,response)
        }
      })
},
function(callback) {
  AnotherModel.find(),
    function(err, response) {
      if (!err) {
        callback(null,response)
    })

}],
function(err, results) {
  if(!err){
    res.json(results);
  // You will get array of results in your results agrs
  }
};