首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点异步没有运行异步。

节点异步没有运行异步。
EN

Stack Overflow用户
提问于 2015-06-12 11:47:30
回答 1查看 44关注 0票数 1

我正在尝试使用async来收集数组中的一些额外数据。

为此目的,我创建了以下内容:

代码语言:javascript
复制
    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

所以我的问题是,我做错了什么,怎样才能解决它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 12:01:33

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

代码语言:javascript
复制
async.map(modules, function (module,moduleCallback) {
    //...
}, function(err, modules) {
    onSuccess(modules);
});

目前,您的代码将异步map作业排成队列,然后运行onSuccess,而无需等待map完成(甚至启动)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30802311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档