NodeJS에서 MongoDB 비동기 쿼리를 동기화하는 방법
문제
루프 본문 내부에 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
});
다른 팁
프로세스 게이트처럼 작동하는 동기 메커니즘이 필요합니다. 각각의 반환 쿼리는 게이트에 도착해야합니다.어떤 카운터를 감소시키고 그 결과를 보증합니다. 게이트에 모두 도착하면 최종 콜백이 수집 된 결과를 반환합니다.
제휴하지 않습니다 StackOverflow