Обработка асинхронной базы данных в nodejs

#javascript #node.js #mongodb #sails.js #sails-mongo

#javascript #node.js #mongodb #sails.js #паруса-монго

Вопрос:

Я новичок в node js. Я использую sails js в качестве фреймворка. Я пытаюсь использовать вложенный запрос к базе данных. Пожалуйста, проверьте добавленный код.

Мое текущее имя коллекции mongo — todostatus. Из нее я извлек данные. Затем я попытался использовать функцию обратного вызова для итерации данных и обновления каждого элемента внутри данных из базы данных. Но я не получаю все данные. Может кто-нибудь, пожалуйста, дать мне подсказку?

Заранее спасибо,

Nixon

  TodoStatus.find({todo_id : req.params.todo_id}).done(function(errs, responsible){
                                if(errs){
                                }
                                else{

                                    function grabUsersName(todoRes, callback){
                                        async.forEach(todoRes, function (item, callback2){

                                           User.findOne ({id : item.user_id}).done(function (errses, user) {
                                                if(errses)
                                                {
                                                    console.log(errses);
                                                }
                                                else
                                                {
                                                    item['name'] = user.name;
                                                }

                                            });
                                        }, function(eerr) {
                                            callback(todoRes);
                                        });
                                    }

                                    grabUsersName(responsible, function(resultsa){
                                        console.log(resultsa);

                                        return res.view({
                                            responsible: resultsa
                                        })
                                    })



                                }
                            })
  

Ответ №1:

Я нашел решение.

Проблема заключается в функции grabUserName(). Я пропустил использование обратного вызова для async.forEach. Проверьте код функций для получения дополнительной информации

 function grabUsersName(todoRes, callback){
    async.forEach(todoRes, function (item, callback2){
          User.findOne ({id : item.user_id}).done(function (errses, user) {
                if(errses){
                   console.log(errses);
                }
                else{
                   item['name'] = user.name;
                   callback2();
                }
           })
    }, function(eerr) {
               callback(todoRes);
   });
}