2014-09-15 4 views
0

Game 개체에 User 개체를 추가하여 편집해야합니다. 이것은 몽구스 쿼리 findById에 의해 수행됩니다. 이 쿼리가 작동합니다. 그러나 수정 된 게임을 결과 배열에 추가하려면 뭔가 잘못되었습니다. 'console.log (게임);' 올바른 출력을 반환하지만 'console.log (result);' 항상 비어 있습니다. 무슨 일 이니? 내부 기능이있는 것입니까?노드 JS + Express + Mongoose가 findById의 배열을 채우지 않습니다.

답변

0

클래스 콜백 문제가 발생했습니다. 게임에서 forEach을 호출하면 코드는 실제로 콜백 외부에서 계속 실행되므로 결과는 처음에 할당 한 값이됩니다 ([]). 이는 비동기로 평가되는 코드 때문입니다.

는 루프가 완료되면 다음과 같이 호출되는 콜백 함수로 코드를 이동하여이 문제를 해결 :

var utils = require('restberry-utils'); 

var getResult = function(next) { 
    var result = []; 
    utils.forEachAndDone(games, function(game, iter) { 
     User.findById(game.user1_id, function(err, user) { 
      if (err) console.log(err); 
      game.user1 = user; 
      result.push(game); 
      iter(); 
     }); 
    }, function() { 
     next(result); 
    }); 
}; 

getResult(function(result) { 
    console.log(result); 
}); 

공지 나는 restberry-utils 패키지를 가져 와서 forEachAndDone 방법을 사용했습니다. 이 메서드는 개체를 반복하지만 iter 메서드를 호출하지 않으면 계속되지 않습니다. 모든 객체를 반복 할 때 최종 콜백이 호출되며 결과는 반환됩니다.

희망적입니다.

+0

고마워요! 알았어. – Jan

관련 문제