2016-07-18 2 views
0

배열을 선언 한 코드는 다음과 같습니다. var filteredArray = [];. 나는 restArray의 콜백 함수에서 데이터를 push하기 위해 filteredArray를 사용한다 (이것은 for 루프 내에서 발생한다). for 루프가 끝나면. filteredArray를 내 각 컨트롤러로 보내려고합니다. 여기 내 코드가있다. for 루프 외부에 console.log (filteredArray)를 넣으면 빈 배열이 생깁니다. 누군가 제발 도와 줄 수 있니?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