Nodejs async.waterfall回调参数不匹配?

时间:2017-11-11 01:06:28

标签: javascript node.js async.js mysqljs

我正在尝试使用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之后有其他函数/查询,但为了简洁起见,我已将它们从代码中删除。

1 个答案:

答案 0 :(得分:0)

我可以看到你正在使用async.series。可能你应该使用async.waterfall将一个函数的结果传递给另一个函数。

Nodejs async series - pass arguments to next callback