2017-01-29 5 views
0

Я пытаюсь извлечь данные из нескольких коллекций, используя схему мангуста, а затем отправить ответ в формате JSON. Это код, который я написал.Пустой массив вне функции Mongoose

function GetConnections_V2(req,res){ 

    Connection.find({"user_id":"55006c36c30f0edc5400022d"}) 
    .exec(function(err,connections){ 

     var list = []; 
     var obj = new Object(); 
     connections.forEach(function(connection){ 
          obj.friend_id = connection.user_id_friend; 
      User.findById(connection.user_id_friend) 
      .exec(function(err,user){ 
        if(user !== null) { 

          obj.friend_email = user.email; 
          obj.friend_details_id = user.details; 
     UserDetail.findById(user.details).exec(function (err, details) { 
            obj.firstname = details.firstname; 
            obj.lastname = details.lastname; 
            obj.image = details.image; 

           list.push(obj); 
          }); 
        } 
       }); 
      }); 
     }); 
     console.log(list); 
     res.send(list); 
}; 

Выполнение этого кода. Он возвращает пустой массив. Как решить эту проблему?

+0

Вы вызываете 'async' функции внутри цикла for. Используйте 'async' lib или' prom'. –

+0

@MukeshSharma Как мне это сделать? Я на самом деле новичок в этом. –

ответ

1

Вы вызываете асинхронные функции внутри цикла. Вот почему list пуст.

Для решения этой проблемы вы можете использовать async.

var async = require('async'); 

function GetConnections_V2(req,res){ 

    Connection.find({"user_id":"55006c36c30f0edc5400022d"}) 
    .exec(function(err,connections){ 

     var list = []; 

     async.each(connections, function(connection, callback){ 
      var obj = new Object(); 
      obj.friend_id = connection.user_id_friend; 

      User.findById(connection.user_id_friend) 
       .exec(function(err,user){ 
        if(user !== null) { 
         obj.friend_email = user.email; 
         obj.friend_details_id = user.details; 
         UserDetail.findById(user.details).exec(function (err, details) { 
          obj.firstname = details.firstname; 
          obj.lastname = details.lastname; 
          obj.image = details.image; 

          list.push(obj); 
          callback(); 
         }); 
        } else { 
         callback(); 
        } 
      }); 
     }, function(err){ 
      return res.send(list); 
     }); 
    }; 
} 

Надеюсь, это вам поможет.

+0

Это работает, спасибо, так много. :) Я новичок в этом. Не могли бы вы объяснить, как работает функция async и exec? –

+0

Здесь вы можете прочитать об асинхронном программировании. Https://blog.risingstack.com/node-hero-async-programming-in-node-js/ –

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

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