我正在使用以下代码将行插入数据库。回调后触发最终的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);
}
)
};
答案 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);
}
)
};