Не может получить доступ к результату db в Nodejs, он всегда возвращает ноль

1
 var robject=[]; 
 async.waterfall([
        function (callback) {
            for(var i in serial){
                Router.find({},{r_serial_no:serial[i]},function (err,routerData) {
                    robject = robject.concat(routerData);
                });
            }
            console.log('Robject= '+robject); //THIS RETURNS NULL
            callback(null, robject);
        },
        function (blogs, callback) {
            res.render('index', {dispatched_data:dispatched_data });
            callback(null, 'Ended..' );
        }

    ], function (err, result) {
        console.log(result);
    });

это моя модель водопада, здесь мне нужно получить доступ к robject из метода schema.find вне этого метода. но он всегда возвращает null.. как получить доступ к этому?

  • 0
    Первая проверка вы получаете что-нибудь в routerData? Это может быть фактически нулем.
  • 0
    нет, братан, внутри цикла я получаю данные ..
Показать ещё 3 комментария
Теги:
express
mongoose

2 ответа

1

У вас есть синтаксическая ошибка:

 for(var i in serial){
                Router.find({},{r_serial_no: i},function (err,routerData) {
                    robject = robject.concat(routerData);
                });
            }

цикл "for" определяет "i" как следующий элемент в массиве каждой итерации

  • 0
    брат, это тоже работает .. моя проблема с доступом к переменной. если я войду в цикл for, я получу результат.
  • 0
    попробуйте удалить все условия из метода .find и получить все результаты из базы данных
Показать ещё 1 комментарий
1

Проблема, которую я вижу здесь, заключается в for...in цикле. Ваш обратный вызов будет запущен, даже если ваш процесс, т. Router.find не завершен. Вы можете попробовать под кодом, это может помочь.

В отличие от вашего serial объекта, создайте массив с именем serials.

var robject=[]; 
 async.waterfall([
        function (callback) {
            async.each(serials,
              function(serial, localCb){
                Router.find({},{r_serial_no:serial},function (err,routerData) {
                    robject = robject.concat(routerData);
                    localCb()
                });
              },
              function(err){
                console.log('Robject= '+robject); 
                callback(null, robject);
              }
          ); 
        },
        function (blogs, callback) {
            res.render('index', {dispatched_data:dispatched_data });
            callback(null, 'Ended..' );
        }

    ], function (err, result) {
        console.log(result);
    });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню