javascript - nodejs异步并行内部异步每个

标签 javascript node.js express asynchronous async.js

首先,我是 nodejs 新手。在一个 API 上工作,我必须在每个循环中执行多个查询。所以,我开始在 express 中使用异步模块。我使用的确切代码是

        new_or_updated = {};
        async.each(rows, function(e, callbackParent) {
            new_or_updated.id = e.id;
            async.parallel([
                function(callback){
                    db.query("SELECT sender_string FROM  filter_positive_rules_sender WHERE rule_id = ? AND is_deleted = 0", e.id,function(err, rows, fields){
                        if (err) {
                            return callback(err);
                        }
                        new_or_updated.sender = rows.map(x => x.sender_string);
                        callback(null);
                    });
                },
                function(callback){
                    db.query("SELECT subject_string FROM filter_positive_rules_subject WHERE rule_id =  ? AND is_deleted = 0", e.id ,function(err, rows, fields){
                        if (err) {
                            return callback(err);
                        }
                        new_or_updated.subject = rows.map(x => x.subject_string);
                        callback(null);
                    });  
                },
                function(callback){
                    db.query("SELECT body_string FROM filter_positive_rules_body WHERE rule_id = ?  AND is_deleted = 0", e.id ,function(err, rows, fields){
                        if (err) {
                            return callback(err);
                        }
                        new_or_updated.body = rows.map(x => x.body_string);
                        callback(null);
                    });
                }
            ],
            function(err) {
                if (err) {
                    res.status(500).json(
                        "Internal server error"
                    ).send();
                }
                console.log(new_or_updated):
                callbackParent(null, new_or_updated);
            });

        },
        function(err, result) {
            if (err) {
                res.status(500).json(
                    "Internal server error"
                ).send();
            }
            console.log(result)
        });

如您所见,我正在尝试使用异步模块填充一个对象。当我在并行异步中控制 new_or_updated 时,数组已正确构建。但是,当我将变量发送到每个异步回调并对其进行控制台(结果变量)时,我得到了未定义。此外,当我在 parentCallback 中控制 new_or_updated 时,我只得到数组中的一个元素(使用每个异步模块构建的最后一个数组)。

我在这里做错了什么?有人可以向我解释嵌套异步实际上应该如何在实践中工作。

最佳答案

根据异步代码库,“async.each”并未设计为在回调中采用两个参数。

它将始终仅使用单个“err”(或不带任何参数)回调参数来调用。

此外,在任何异步操作的情况下,在“async.each”操作中设置全局对象的属性时会覆盖该属性。这意味着在第一次迭代中设置的“new_or_updated.id”的值可能会被“async.each”的任何后续迭代覆盖。

因此,理想情况下,此处“new_or_updated”的全局对象应该是一个对象数组,每个对象都具有一些唯一的属性值。以便在“async.each”上保存每次迭代的值和上下文

关于javascript - nodejs异步并行内部异步每个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41606065/

相关文章:

javascript - Stripe/node.js : how retrieve stripe subscription safely + increment 1

javascript - Jade,为什么变量在一种情况下用单引号发送,而在另一种情况下不加引号?

express - 使用 Passport.js 显示 flash 消息

javascript - 将两个文件上传到 Node 服务器并使用ajax接收回文件

javascript - 尝试从两组字符之间提取数据

javascript - 如何制作 HTML 表格数组?

javascript - 使用 Service Worker 时无法访问站点

javascript - D3 Json 请求获取 XmlHttpRequest 错误 : Origin null is not allowed by Access-Control-Allow-Origin

node.js - Webpack 从使用 module.exports 的文件导入

javascript - 为什么在express js中间件中调用函数表达式会被提升?