【发布时间】:2021-01-06 08:59:02
【问题描述】:
我正在运行支持异步/等待的 Node 7.6.0。 node-postgres 客户端池支持 async/await,并且有一个很好的示例 here。但是,node-postgres (here) 中的事务示例使用回调而不是 async/await。尽管有这个例子,我还是想在快速测试中尝试使用 async/await 进行事务:
let client = null;
try {
client = await this.pool.connect();
} catch (error) {
console.log('A client pool error occurred:', error);
return error;
}
try {
await client.query('BEGIN');
await client.query('UPDATE foo SET bar = 1');
await client.query('UPDATE bar SET foo = 2');
await client.query('COMMIT');
} catch (error) {
try {
await client.query('ROLLBACK');
} catch (rollbackError) {
console.log('A rollback error occurred:', rollbackError);
}
console.log('An error occurred:', error);
return error;
} finally {
client.release();
}
return 'Success!';
这似乎工作得很好,但 I was told 由 node-postgres 贡献者认为这是一个坏主意。不幸的是,他没有花时间解释为什么这是一个坏主意——他只是说要在 Stack Overflow 上寻求答案。
为什么在 node-postgres 中使用 async/await 而不是回调来执行事务是个坏主意?
【问题讨论】:
-
如果你将创建事务的逻辑移到不同的函数中,这不是一个坏主意,vitally-t 只是想找个借口来推广他的库。忽略评论。
标签: node.js postgresql transactions node-postgres