ОБНОВЛЕНИЕ - Решение: вместо этого я должен был использовать функцию MongoDBs $in
- подробности здесь
У меня есть следующий блок Q.all:
Q.all([
getFirstBlock(),
getSecondBlock(),
])
.then(function(){
getSecondBlockProcessed();
})
.then(function(){
res.json(completeArray);
});
У меня проблема в том, что когда я перехожу к последнему блоку then
, я замечаю, что функция getSecondBlockProcessed
не была завершена. Все в первом Q.all
сделано. Почему это обещание не выполняется?
И рассматриваемый метод выглядит так:
var getSecondBlockProcessed = function() {
return Q.promise(function(resolve, reject) {
for (var i=0; i<mostInRegion.length; i++){
Person.find(
{_id: mostInRegion[i]['_id']},
{question:1, country: 1},
function(err, found) {
mostInRegion2.push(found);
})
}
resolve();
});
}
Любая помощь будет оценена / что я упустил из виду?
Спасибо
return
getSecondBlockProcessed();
, если он асинхронный и возвращает обещание! Или просто сделайте.then(getSecondBlockProcessed)
- person Bergi   schedule 17.02.2016.then(function(){ return getSecondBlockProcessed(); })
- person userMod2   schedule 17.02.2016find()
в цикле for? p.s. Я не думаю, что это повторяющийся вопрос, поскольку у меня другой. - person userMod2   schedule 17.02.2016resolve()
помещается после цикла for (где я хочу, чтобы он был), он не возвращает обещание. Если я помещаю в цикл, это дает мне только один результат (после первого цикла). - person userMod2   schedule 17.02.2016find
и использоватьPromise.all
илиPromise.map
, чтобы дождаться результатов цикла. Я снова открыл, чтобы вы могли опубликовать свое решение как ответ - person Bergi   schedule 17.02.2016