2016-07-18 3 views
0

У меня есть код ниже, где я объявлял массив var filteredArray = [];. Я использую filterArray для ввода данных в функцию обратного вызова вызова Rest (это происходит внутри цикла for). Как только цикл for завершается. Я хочу отправить filterArray на мой угловой контроллер. Вот мой код. Когда я помещаю console.log (filterArray) вне цикла for, я получаю пустой массив. Кто-то может помочь?Доступ к массиву внутри вызова REST

assignedToMe: function(req, res) { 
    CustomerUser.find({ 
    userEmail: { 
     $in: req.body.userEmail 
    } 
    }, function(err, docs) { 

    var filteredArray = []; 
    for (var i = 0; i < docs.length; i++) { 
     var url = config.pythiaApi + config.pythiaApiPrefix + '/quotes/' + docs[i]['quoteId']; 
     if (req.originalUrl.lastIndexOf('?') !== -1) { 
     url += req.originalUrl.substr(req.originalUrl.lastIndexOf('?')); 
     } 
     restClient.get(url, function(body, response) { 
     filteredArray.push(body.data) 
     }) 
    } 

    console.log(filteredArray) // Gives empty array 
    res.status(200).json({}); 

    }); 
} 

ответ

1

Использовать асинхронный цикл для асинхронных вызовов. Например async.times

assignedToMe: function(req, res) { 
    CustomerUser.find({ 
     userEmail: {$in: req.body.userEmail} 
    }, function(err, docs) { 
     var filteredArray = []; 
     async.times(docs.length, function(i, next){ 
      if(err) return next(err); 
      var url = config.pythiaApi + config.pythiaApiPrefix + '/quotes/'+docs[i]['quoteId']; 
      if (req.originalUrl.lastIndexOf('?') !== -1) { 
       url += req.originalUrl.substr(req.originalUrl.lastIndexOf('?')); 
      } 
      restClient.get(url, function (body, response) { 
       next(null, body.data) 
      }) 
     }, function(err, result){ 
      // result contains your array 
      res.status(200).json({}); 
     }) 
    }); 
} 
+0

Благодарим за помощь. Это сработало! :) – JaRavi

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