web-dev-qa-db-ja.com

コールバックまたは非同期/待機を伴うnode-postgresトランザクション?

私はNode 7.6.0、async/awaitをサポートしています。node-postgresクライアントプールはasync/awaitをサポートしており、良い例があります ここ 。 、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!';

これはうまく機能しているようですが、 私は言われました これは悪い考えだとnode-postgresの寄稿者から。残念ながら、彼は時間をかけて説明しませんでしたなぜこれは悪い考えです—彼はただStackOverflowで答えを探すと言いました。

Node-postgresでコールバックの代わりにasync/awaitを使用してトランザクションを実行するのはなぜ悪い考えですか?

9
Rob Johansen

Node-postgres( brianc )の作成者は、GitHubに関する私の最初の質問に対して丁寧に素晴らしい回答を提供してくれました。簡単に言うと、async/awaitでトランザクションを実行することはではない悪い考えではありません。

ここで彼の完全な応答を参照してください: https://github.com/brianc/node-postgres/issues/1252#issuecomment-293899088

9
Rob Johansen