我有以下路由功能:
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中我正在调试响应)。
那么我做错了什么?
答案 0 :(得分:3)
您正在立即调用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);
});
答案 1 :(得分:0)
res.json(result)
作为函数调用,因此立即调用。要确保在res.json
之后调用async.each()
,您需要将函数作为回调传递:
async.each(result, function () {
...
}, function(err) {
if(!err) res.json(result);
));