node-postgres与callback或asynchronous/等待交易?

我正在运行节点7.6.0,它支持asynchronous/等待。 节点postgres客户端池支持asynchronous/等待,并有一个很好的例子。 但是,node-postgres( 这里 )中的事务示例使用callback而不是async / await。 尽pipe这个例子,我想我会尝试在asynchronous/等待快速testing交易:

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!'; 

这似乎工作得很好,但节点postgres撰稿人告诉我 ,这是一个坏主意。 不幸的是,他没有花时间来解释为什么这是一个坏主意,他只是说要寻找堆栈溢出的答案。

为什么在node-postgres中使用async / await而不是callback执行事务是一个坏主意?

node-postgres( brianc )的创build者对GitHub上的原始问题给予了很好的回应。 简单的回答是,使用async/await执行事务并不是一个坏主意。

在这里看到他的全部答复: https : //github.com/brianc/node-postgres/issues/1252#issuecomment-293899088