【问题标题】:Nodejs async.waterfall callbacks argument mismatch?Nodejs async.waterfall 回调参数不匹配?
【发布时间】:2017-11-11 22:49:16
【问题描述】:

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

【问题讨论】:

  • dbService.getConnection( function(connection) ?我认为您不需要 dbService.getConnection (err, connection) 的包装器。
  • 没有区别。即使在进行了更改之后,我在 _insertNewUser 中获得了一个用于连接的 [Function] 而不是获得一个对象,并且回调是未定义的。

标签: javascript node.js async.js mysqljs


【解决方案1】:

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

Nodejs async series - pass arguments to next callback

【讨论】:

  • 嗨,普拉姆,我实际上是从瀑布开始的,但结果完全一样。所以,我在尝试系列,但徒劳无功。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2016-06-15
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多