节点 Async.auto 回调不是函数

Node Async.auto Callback is not a function

我的 nodejs 脚本和异步库有问题。 我有一个包含 2 个部分的 async.auto。第一部分好的,在第二部分我有另一个 async.auto,其中 2 个部分几乎相同,sql 查询和数组有一些变化。但是这里的第一部分工作正常,第二部分 zutKopf 因回调函数 cbzutk 不是函数而停止。某天我试图修复它,但找不到失败原因,因为它写得像第一部分 zubKopf。

希望你能帮助我。

问候

    async.auto({
    one: function(cbone){
        db.getConnection(function(err, dbs){
            dbs.query("insert into rezepte (kat_id, rez_name, rez_desc, rez_img) values(?,?,?,?)",[RezeptComp.rezept.kat_id,RezeptComp.rezept.rez_name,RezeptComp.rezept.rez_desc,RezeptComp.rezept.rez_img],function(err, rows) {
                if (err) {
                    cbone(err);
                    return;
                }
                console.log('query Rezept');
                rezeptId = rows.insertId;
                RezeptComp.rezept.rez_id = rows.insertId;
                dbs.release();
                cbone(null);
            });
        });
    },
    two: ['one', function(cbtwo){
            async.auto({
                zubKopf: function(cbzubk){
                    async.eachSeries(RezeptComp.zubereitung, function(data,next){
                        db.getConnection(function(err,dbzubk){
                            dbzubk.query("insert into zubereitungKopf (rez_id, zubk_text) values("+ rezeptId +",'"+ data.zubk_text +"')",function(err, rows) {
                                if (err) {
                                    cbtwo(err);
                                    return;
                                }
                                console.log('query zubk');
                                zubkId = rows.insertId;
                                RezeptComp.zubereitung[zubkd].zubk_id = zubkId;
                                dbzubk.release();
                                async.eachSeries(data.zubp, function(data2,next2){
                                    db.getConnection(function(err,dbzubp){
                                        dbzubp.query("insert into zubereitungPos (zubk_id, zubp_text) values("+ zubkId +",'"+ data2.zubp_text +"')",function(err, rows) {
                                            if (err) {
                                                cbtwo(err);
                                                return;
                                            }
                                            console.log('query zubp');
                                            zubpId = rows.insertId;
                                            RezeptComp.zubereitung[zubkd].zubp[zubpd].zubp_id = zubpId;
                                            dbzubp.release();
                                            zubpd = zubpd + 1;
                                            next2(null);
                                        });
                                    });
                                }, function(err, results){
                                    zubkd = zubkd + 1;
                                    zubpd = 0;
                                    next(null);
                                });
                            });
                        });
                    }, function(err, results){
                        cbzubk(null);
                    });  
                },
                zutKopf: ['zubKopf', function(cbzutk){
                    async.eachSeries(RezeptComp.zutaten, function(data3,next3){
                        db.getConnection(function(err,dbzutk){
                            dbzutk.query("insert into zutatenKopf (rez_id, zutk_text) values("+ rezeptId +",'"+ data3.zutk_text +"')",function(err, rows) {
                                if (err) {
                                    cbzutk(err);
                                    return;
                                }
                                console.log('query zutk');
                                zutkId = rows.insertId;
                                RezeptComp.zutaten[zutkd].zutk_id = zutkId;
                                dbzutk.release();
                                async.eachSeries(data3.zutp, function(data4,next4){
                                    db.getConnection(function(err,dbzutp){
                                        dbzutp.query("insert into zutatenPos (zutk_id, zutp_text) values("+ zutkId +",'"+ data4.zutp_text +"')",function(err, rows) {
                                            if (err) {
                                                cbzutk(err);
                                                return;
                                            }
                                            console.log('query zutp');
                                            zutpId = rows.insertId;
                                            RezeptComp.zutaten[zutkd].zutp[zutpd].zutp_id = zutpId;
                                            dbzutp.release();
                                            zutpd = zutpd + 1;
                                            next4(null);
                                        });
                                    });
                                }, function(err, results){
                                    zutkd = zutkd + 1;
                                    zutpd = 0;
                                    next3(null);
                                });
                            });
                        });
                    }, function(err, results){
                        cbzutk(null);
                    });    
                }],
                final: ['zubKopf', 'zutKopf', function(error, results){
                    cbtwo(null);
                }]
            }); 
    }],
    final: ['one', 'two', function(error, results){
        callback(RezepComp);
    }]
});

在 async.auto 中,依赖函数首先接收前一个函数的参数,然后您可以在函数头中定义回调,例如 two: ['one', function(parameter, callback) 而不是 two: ['one', function(callback)