Проблема обратного вызова узла js - PullRequest
0 голосов
/ 17 января 2019

В моем приложении NodeJS я создаю API, который сначала выбирает все имена тарифов из коллекции тарифов, а затем на основе всех этих тарифов. Я хочу вернуть количество этих тарифов, назначенных пользователям, которые я пробовал нижеприведенным кодом

router.get('/getTarrifDetails', (req,res,next) => {
     result=[];
     tname=[];
     counts=[];

     Tarrif.find().distinct('tarrif_type', (err,docs) => {
       docs.forEach((ele) => {
         tname.push(ele);

         User.countDocuments({tarrif_type:ele}, (uerr,usr) => {
             counts.push(usr);
         });

         result.push(ele);
     });

     result.push(counts);
   });
});

Когда я console.log(result) показывает только один массив tarrif_type, а другой массив пуст

1 Ответ

0 голосов
/ 17 января 2019

Вы должны понимать, как работает цикл обработки событий. Я был здесь однажды, и однажды совершил одни и те же ошибки.

Попробуйте синхронизировать обратные вызовы, так как вы хотите последовательно, например, так:

  router.get('/getTarrifDetails', (req, res, next) => {
    let result = [], count = 0;
    Tarrif.find().distinct('tarrif_type', (err, docs) => {
      async.forEach(docs, async ele => {
        try {
          let userCount = await User.countDocuments({ tarrif_type: ele });
          result.push(userCount);
        } catch (err) {
          //your err goes here.
        }
      })
    });
  });

Я не уверен, что это будет работать на 100%, но попробуйте и отладьте немного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...