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