节点asynchronous不运行asynchronous

我正在尝试使用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我想findis_complete == 1数据,如果一个值is_complete == 1

一旦find一个值,它应该设置module.dataValues.academy_attempt = result

一旦所有的模块被迭代后,它应该调用callback( onSuccess )并返回模块。

但是,它在async调用之前运行onSuccess

所以我的问题是我做错了什么,如何解决?

您需要在async.map的完成callback中运行onSuccess 。 第一个callback是迭代器,为每个映射元素运行; 第二个callback(当前没有使用)在所有迭代完成后运行。

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

目前,您的代码将asynchronousmap作业排队,然后在不等待map完成(甚至启动)的情况下运行onSuccess