使用async/await和util.promisify可以简化回滚事务的实现。首先,需要引入`util`模块来使用`promisify`方法:
const util = require('util');
然后,使用`util.promisify`将回滚操作的`rollback`方法转换为返回Promise的版本:
const rollbackAsync = util.promisify(connection.rollback.bind(connection));
接下来,使用async/await来包装事务的整个过程:
try {
// 开始事务
await util.promisify(connection.beginTransaction).call(connection);
// 定义需要批量修改和插入的数据
const updates = ...
// 执行批量修改和插入操作
await util.promisify(connection.query).call(connection, 'UPDATE mytable SET name = ? WHERE id = ?', [updates.name, updates.id]);
await util.promisify(connection.query).call(connection, 'INSERT INTO mytable(name) VALUES(?)', [updates.name]);
// 提交事务
await util.promisify(connection.commit).call(connection);
console.log('批量修改和插入操作已成功提交');
} catch (error) {
// 发生错误时回滚事务
await rollbackAsync();
throw error;
} finally {
// 释放数据库连接
connection.release();
}
上述代码中,使用`util.promisify`将事务中的每个异步操作(例如`connection.query`、`connection.commit`)转换为返回Promise的版本,并使用`await`关键字等待这些操作的结果。如果任何一个操作发生错误,就会跳到`catch`块中进行回滚操作,然后抛出错误。在`finally`块中,释放数据库连接。
请注意,以上代码仅为示例,实际应用中可能需要根据具体情况进行修改。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |