我有以下路由功能:
router.route('/api/teamUsersWithStat/:team_id')
.get(function (req, res) {
var user_stat = academy_team_user_stat.build();
user_stat.usersByTeam(req.params.team_id, function (result) {
if (result) {
async.each(result, function () {
var i = 0;
user_stat.findModulesTaken(res.user_id, res.team_id, function (modules) {
result[i].modules = modules;
i++;
});
}, res.json(result))
} else {
res.status(401).send("Team not found");
}
}, function (error) {
res.send("Team not found");
});
});
如您所见,我使用 async.each
方法将其他数据收集到现有数组中。
但是,在没有运行实际循环的情况下调用 res.json(result)
。
(我可以这么说,因为在我的 javascript 中我正在调试响应)。
那么我做错了什么?
最佳答案
您将立即调用 res.json
方法,同时还会在循环内重新初始化 i
,使其始终为 0
。
此外,each
需要回调才能继续下一次迭代。
以下是我的做法:
async.each(result, function (r, callback) {
user_stat.findModulesTaken(res.user_id, res.team_id, function (modules) {
result[result.indexOf(r)].modules = modules;
callback();
});
}, function(err) {
if(err)
return res.json(err);
res.json(result);
});
关于javascript - 迭代之前调用异步每个回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674744/