Хорошо, следующий код работает правильно для меня, это обычный способ выполнения асинхронных циклов (count is async). Таким образом, перед обратным вызовом я получаю 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 номера регистрируемые (с значение ожидаемого последнего 'u', которое было вызвано в конце), в то время как они должны в принципе быть разными, потому что likesPartial array имеет на каждом этапе различное количество элементов.
Два примера кажутся мне похожими, поэтому я не могу найти ошибку.
Спасибо.
Я не знаю мангуста, но 'for' не может быть' async'. Вы можете просмотреть рекурсию для циклирования. – Rajesh
Что вы хотите получить ** второй пример? –
Строго говоря, я полагаю, вы имеете в виду «для не может иметь асинхронные функции внутри». в этом случае я говорю «нет». пример 1 работает. Я не уверен, что это лучший способ сделать что-то, но они могут быть сделаны таким образом. – sheriff