Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nodejs异步并行在一个异步_Javascript_Node.js_Express_Asynchronous_Async.js - Fatal编程技术网

Javascript nodejs异步并行在一个异步

Javascript nodejs异步并行在一个异步,javascript,node.js,express,asynchronous,async.js,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(ca

首先,我对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_或更新的_时,阵列已正确构建。但是,当我将变量发送到each异步回调并控制台它(结果变量)时,我得到了未定义的变量。另外,当我在parentCallback中控制台new_或更新的_时,我在数组中只得到一个元素(使用每个异步模块的最后一次数组构建)


我做错了什么?有人能给我解释一下嵌套异步在实践中是如何工作的吗。

根据异步的代码库,“async.each”并不是为了在回调中接受两个参数而设计的

它总是只使用一个“err”(或不使用任何参数)回调参数调用

此外,在“async.each”内设置全局对象的属性时,如果发生任何异步操作,操作都会覆盖该属性。这意味着在第一次迭代中设置的“new_或_updated.id”的值可能会被任何后续的“async.each”迭代所覆盖


因此,理想情况下,这里的全局对象“new_或_updated”应该是一个对象数组,每个对象都有一些唯一的属性值。为了保存“async.each”上每个迭代的值和上下文,返回回调。。试试这个。 我正在使用async.map和async.瀑布 对不起,如果错误和糟糕英语的危险,我只是一个初学者,我只是一个学生

async.map(rows, function(e, callbackParent) {
    async.waterfall([
        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);
                }
                e.sender = rows.map(x => x.sender_string);
                callback(null, e );
            });
        },
        function(Obj, 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);
                }
                Obj.subject = rows.map(x => x.subject_string);
                callback(null, Obj);
            });
        },
        function(Obj, 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);
                }
                Obj.body = rows.map(x => x.body_string);
                callback(null, Obj);
            });
        }
    ],
    function(err, result) {
        callbackParent(err, result);
    });
},
function(err, result) {
    if (err) {
        res.status(500).json(
            "Internal server error"
        ).send();
    }
    res.send( result )
});
我觉得这是工作

function test( callback ) {
    callback( [
        {
            'name':'Anu'
        },
        {
            'name':'hem'
        }
    ] );
}
test( function( aaaaaaaaaaa ) {
    async.map( aaaaaaaaaaa, function( e, callbackParent ) {
        async.waterfall( [
            function( callback ) {
                e.number = 123;
                return callback( null, e );
            },
            function( obj, callback ) {
                obj.kelas = '1';
                return callback( null, obj );
            }
        ], function( eerr, r ) {
            callbackParent( eerr, r );
        } );
    }, function( erro, ok ) {
        res.send( ok );
    } );
} );

使用全局变量存储值。尝试在执行异步操作的函数外部初始化变量operations@ArUn新的\u或\u更新的变量在两个async的外部初始化。您可以在主函数和外部初始化它吗try@ArUn我做到了,但我仍然只得到最后一个结果。