2015-06-12 7 views
1

Я пытаюсь использовать async для сбора некоторых дополнительных данных в моем массиве.Узел async не запущен async

для этой цели Айв создали следующее:

User_has_academy_module.findAll({ 
    include: [{model: Module, include: [Category, ModuleType]}], 
    where: {academy_team_id: team_id, user_id: user_id} 
}).then(function (modules) { 
    var i = 0; 
    async.map(modules, function (module,moduleCallback) { 
     var act = Academy_Attempt.build(); 
     if(module.dataValues.is_complete == 1){ 
      act.findByUserTeamAndModule(module.dataValues.user_id, module.dataValues.academy_team_id, module.dataValues.module_id, function (result) { 
       module.dataValues.academy_attempt = result; 
       moduleCallback(null, module); 

      }, function (error) { 

      }) 
     } 
    }); 
    onSuccess(modules); 
}) 

как вы можете видеть из вышесказаннога я сначала собрать массив называется modules, что мне нужна петля на каждый из этих modules я хочу найти вывод дополнительных данных, если значение называется is_complete == 1

когда он находит значение должно установить module.dataValues.academy_attempt = result

После того, как все модули были итерировать он должен вызвать функцию обратного вызова (onSuccess) и вернуть модули.

Однако он выполняет onSuccess перед асинхронным вызовом.

Так что мой вопрос в том, что я делаю неправильно и как это исправить?

+0

Просто вызовите функцию 'onSuccess (modules)' внутри обратного вызова 'async.map'. –

ответ

3

Вам необходимо запустить onSuccess в обратном вызове завершения до async.map. Первый обратный вызов - это итератор, выполняется для каждого отображаемого элемента; второй обратный вызов (который вы в настоящее время не используете) запускается после завершения всех итераций.

async.map(modules, function (module,moduleCallback) { 
    //... 
}, function(err, modules) { 
    onSuccess(modules); 
}); 

В настоящее время код очереди на асинхронный map работу, а затем запускает onSuccess, не дожидаясь map закончить (или даже начать).

Смежные вопросы