javascript - 迭代之前调用异步每个回调

标签 javascript node.js asynchronous

我有以下路由功能:

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/

相关文章:

python - 有没有办法使用 atexit 运行异步协程?

javascript - 不从静态(404 错误)Flaticon 和 Font-mfizz 加载图标 css

javascript - Backbone 点击事件回调中的奇怪索引问题

css - 尝试 sass --watch ./folder ./css 时 sass 编译错误

node.js - 从服务器端的 Handlebars 模板获取 HTML 代码

Javascript 并 promise 执行两个异步任务

javascript - Node.JS:如何将变量传递给异步回调?

javascript - 获取特定字符串和特殊字符之间的字符串

javascript - Rails 服务器返回 HTML 而不是 JavaScript

angularjs - 使用 AngularJS 从 Node.JS 服务器下载文件