В. Все тогда не ждут обещания

ОБНОВЛЕНИЕ - Решение: вместо этого я должен был использовать функцию 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();
      });
}

Любая помощь будет оценена / что я упустил из виду?

Спасибо


person userMod2    schedule 17.02.2016    source источник
comment
Вам потребуется return getSecondBlockProcessed();, если он асинхронный и возвращает обещание! Или просто сделайте .then(getSecondBlockProcessed)   -  person Bergi    schedule 17.02.2016
comment
То есть вроде: .then(function(){ return getSecondBlockProcessed(); })   -  person userMod2    schedule 17.02.2016
comment
@Bergi Пробовал - не сработало. Может ли это быть связано с тем фактом, что у меня есть find() в цикле for? p.s. Я не думаю, что это повторяющийся вопрос, поскольку у меня другой.   -  person userMod2    schedule 17.02.2016
comment
@Bergi, поэтому проблема в том, что когда resolve() помещается после цикла for (где я хочу, чтобы он был), он не возвращает обещание. Если я помещаю в цикл, это дает мне только один результат (после первого цикла).   -  person userMod2    schedule 17.02.2016
comment
@Bergi решил это - stackoverflow.com/questions/8303900/. Пожалуйста, удалите повторяющийся вопрос, поскольку я обновляю свой вопрос   -  person userMod2    schedule 17.02.2016
comment
Ах да, это уже другая проблема. Вы должны обещать find и использовать Promise.all или Promise.map, чтобы дождаться результатов цикла. Я снова открыл, чтобы вы могли опубликовать свое решение как ответ   -  person Bergi    schedule 17.02.2016