async.js在回调后交换变量引用?

时间:2014-03-05 01:05:48

标签: node.js express async.js

我正在使用以下代码将行插入数据库。回调后触发最终的async.waterfall函数错误,结果是交换引用。在sql_pool.release err为null之前,结果包含查询的结果。它们被传递给异步callback()函数,另一方面,err是查询的结果集,结果是未定义的。

我确定我错过了一些东西,但我无法弄清楚是什么。

exports.addEquipType = function(type, cb){
async.waterfall([
    //Acquire SQL connection from pool
    function(callback){
        sql_pool.acquire(function(err, connection){
            callback(err, connection);
        });
    },
    //Prepare and execute SQL
    function(connection, callback){
        var sql = 'INSERT INTO equip_type VALUES(?,?)';
        var inserts = [null, type];
        sql = mysql.format(sql,inserts);
        connection.query(sql, function(err, results) {
            sql_pool.release(connection);
            callback(err, results);  
        });
    },
    function(err, results) {
        if(!results.insertId){
            cb(err, results);
        }else {
            cb(results.insertId);
        }
}], function (err) {
        cb(err, null);
    }
)

};

1 个答案:

答案 0 :(得分:0)

确定。通过一些试验和错误来计算出这个。看来我不需要在瀑布中的下一个函数的参数列表中包含err。但是,我需要从之前的函数回调它。

更新了工作代码:

exports.addEquipType = function(type, cb){
async.waterfall([
    //Acquire SQL connection from pool
    function(callback){
        sql_pool.acquire(function(err, connection){
            callback(err, connection);
        });
    },
    //Prepare and execute SQL
    function(connection, callback){
        var sql = 'INSERT INTO equip_type VALUES(?,?)';
        var inserts = [null, type];
        sql = mysql.format(sql,inserts);
        connection.query(sql, function(err, results) {
            sql_pool.release(connection);
            callback(err, results);  
        });
    },
    function(results) {
        if(!results){
            cb(null);
        }else {
            cb(results);
        }
}], function (err) {
        cb(null);
    }
)

};