次のコードは正しく動作しますが、非同期ループ(カウントは非同期)の一般的な方法です。だからコールバックする前に、私は3つの数字を記録し、原理的には違う。非同期ループの場合
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つの数字を得ることですlikesPartial配列は各ステップで異なる数の要素を持つため、原則的に異なるはずですが、最後にコールバックされるもの)
2つの例は私に類似しているように見えます。そのため、エラーが見つかりません。
ありがとうございました。
私はmongooseを知らないが、 'for'は' async'にすることはできません。ループのための再帰を調べることができます。 – Rajesh
**あなたは何をしたいですか** 2番目の例は何ですか? –
厳密に言えば、「内部に非同期関数を持つことはできません」という意味だと思います。その場合、私は「いいえ」と言います。例1が動作します。私はこれが最善の方法であるかどうかは分かりませんが、そのようにすることができます – sheriff