문제

루프 본문 내부에 for-loop 문과 비동기 MongoDB가 있습니다.내가 하고 싶은 일은 find 내 MongoDB 데이터베이스에서 쿼리하고 결과를 배열로 푸시합니다.

코드는 다음과 같습니다.

function() arrResult() {
  var arr = [];
  for(...) {
    collection.find({ foo: i }, function (err, cursor) {
      arr.push(cursor);   
    }    
  }
  return arr;
}

그러나 함수의 반환 값이 빈 배열이라는 것은 분명합니다.

나는 다음을 사용하여 이 문제를 해결하고 싶다. Q 기준 치수.어떤 해결책이 있습니까?

도움이 되었습니까?

해결책

Q 모듈을 사용하여 이 문제를 해결하고 싶습니다.어떤 해결책이 있습니까?

예, 약속은 이를 처리하기 위한 매우 쉬운 추상화입니다.쿼리를 병렬로 실행하고 다음을 사용하여 결과를 수집할 수 있습니다. all.

특히, Q 그것은 다음과 같이 보일 것입니다 :

function arrResult(…) {
    var promises = [];
    for (…)
        promises.push( Q.ninvoke(collection, "find", {foo: i}) );
    return Q.all(promises);
}

arrResult(…).then(function(arr) {
    …
}, function(err) {
    // first error, if any occured
});

다른 팁

프로세스 게이트처럼 작동하는 동기 메커니즘이 필요합니다. 각각의 반환 쿼리는 게이트에 도착해야합니다.어떤 카운터를 감소시키고 그 결과를 보증합니다. 게이트에 모두 도착하면 최종 콜백이 수집 된 결과를 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top