我正在尝试使用async.waterfall按顺序对数据库执行查询,以便在一个数据库出现错误时可以回滚所有这些数据库。以下是我的代码:
function _getDBConnection(callback) {
try {
dbService.getConnection(function(connection) {
callback(null, connection);
});
} catch (e) {
callback(e, null);
}
}
function _insertNewUser(newUser, connection, callback) {
if (connection) {
var query = 'somequery';
// Start a transaction
connection.beginTransaction(function(error) {
if (error) {
callback(error, connection, null);
}
// Fire the query
connection.query(query, function(error, result) {
if (error) {
callback(error, connection, null)
} else {
callback(connection, newUser, result.insertId);
}
});
});
} else {
callback('Error: no connection in ', null, null);
}
};
module.exports.doRegister = function(req, res) {
// Collect all the params coming from the UI.
var newUser = {'object with UI params'};
console.log("Trying to register the user...");
async.series([
_getDBConnection,
async.apply(_insertNewUser, newUser)
], function(err, success) {
if (err) {
console.log(err);
} else {
res.status(200).json({
success: true,
message: 'User registeration successfully.'
});
}
});
};

问题:我没有正确地从_getDBConnection函数接收连接对象到第二个函数(_insertNewUser)。它未定义,因此,我收到以下错误。
TypeError:connection.beginTransaction不是函数 ~~~~堆栈跟踪~~~~ 错误:已调用回调 ~~~~堆栈跟踪~~~~
我想我正在接受回调'函数而不是_insertNewUser函数中的连接对象,这是不期望的。我做错了什么?
如果它很重要,我会在被调用的_insertNewUser之后有其他函数/查询,但为了简洁起见,我已将它们从代码中删除。
答案 0 :(得分:0)
我可以看到你正在使用async.series。可能你应该使用async.waterfall将一个函数的结果传递给另一个函数。