使用回调或async/await的node-postgres事务?

Rob*_*sen 9 postgresql transactions node.js node-postgres

我正在运行Node 7.6.0,它支持async/await.node-postgres客户端池支持async/await,这里有一个很好的例子.但是,node-postgres中的事务示例(此处)使用回调而不是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!';
Run Code Online (Sandbox Code Playgroud)

这似乎工作得很好,但我被一个节点postgres贡献者告知,这是一个坏主意.不幸的是,他没有花时间解释为什么这是一个坏主意 - 他只是想在Stack Overflow上寻求答案.

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

Rob*_*sen 9

node-postgres(brianc)的创建者慷慨地对我在GitHub上的原始问题做出了很好的回应.简短的回答是,执行交易并不是一个坏主意async/await.

请在此处查看他的完整回复:https://github.com/brianc/node-postgres/issues/1252#issuecomment-293899088