다음 코드는 올바르게 작동합니다. 비동기 루프를 수행하는 일반적인 방법입니다 (개수가 비동기 임). 따라서 콜백하기 전에 원칙적으로 3 개의 숫자가 기록됩니다.비동기 for 루프
var arrayIds = ['a', 'b', 'c'];
var totalIds = arrayIds.length;
var done = 0;
var count = 0;
for (var i = 0; i < arrayIds.length; i++) {
mongoose.Model.count({ 'likes.id': arrayIds[i] }, function (err, c) {
count += c;
console.log(c);
if (++done < totalIds) return; //else
callback(count);
})
}
하지만이 같은 철학이 다른 경우에 무슨 일이 일어나고 있는지 모르겠어요, 도와주세요 :
var arrayIds = ['a', 'b', 'c'];
var totalIds = arrayIds.length;
var done = 0;
var likesPartial = [];
for (var m = 0; m < arrayIds.length; m++) {
likesPartial.push(arrayIds[m]);
profiles.count({ 'likes.id': { $in: likesPartial } }, function (err, u){
console.log(u);
if (++done < totalIds) return; //else
callback(u);
})
}
문제는 내가 함께 (로그인 같은 3 개 개의 숫자를 얻을 수 있다는 것입니다 기대되는 마지막 'u'의 값, 결국 하나의 콜백), likesPartial 배열은 각 단계마다 다른 수의 요소를 가지고 있기 때문에 원칙적으로 달라야합니다.
두 가지 예는 저와 유사하므로 오류를 찾을 수 없습니다.
감사합니다.
몽구스는 모르지만'for '는'async'가 될 수 없습니다. 루핑을 위해 재귀를 조사 할 수 있습니다. – Rajesh
** 원하는 것은 무엇입니까 ** 두 번째 예제는 무엇입니까? –
엄밀히 말하면, "비동기 함수를 내부에 가질 수 없다"는 것을 의미한다고 가정합니다. 그 경우, 나는 "아니오"라고 말합니다. 예제 1이 작동합니다. 나는 이것이 일을하는 가장 좋은 방법이라고 확신하지 못한다. 그러나 그들은 그런 식으로 행할 수있다. – sheriff