2

私の問題は、クエリの複雑なチェーンがあり、このトランザクションの誰かが失敗するとロールバックすることです。Sails のトランザクションについて読んだことがありますが、デフォルトでは、各トランザクションが Postgres との新しい接続を作成するため、Sails はトランザクションをサポートしていないため、1 つのクエリで新しい接続が行われます。では、Sails でトランザクションを使用するにはどうすればよいでしょうか?

4

2 に答える 2

1

現在、トランザクションはウォーターラインではサポートされていません。https://github.com/balderdashy/waterline/issues/755でディスカッションに参加できます。

トランザクションはロードマップにありますが、近い将来には予定されていません: https://github.com/balderdashy/waterline/blob/master/ROADMAP.md#pending-proposals

回避策としてhttps://github.com/Shyp/pg-transactionsを試すこともできますが、コードがデータベースに依存しなくなるため、ウォーターラインの柔軟性が失われます。

また、プロミス (Postgres)とSails.js + Postgres でトランザクションを使用する場合の Sails.js のベスト プラクティス: トランザクションの問題を確認してください。

于 2016-09-12T22:08:16.257 に答える
1

最も簡単な方法は、 pg-promiseでサポートされている自動トランザクションを使用することです。

db.tx(t=> {
    // - returning a value or a resolved promise will result in COMMIT
    // - returning a resolved promise or throwing an error will result in ROLLBACK
})
    .then(data=> {
        // COMMIT has been executed
        // data  = data returned from the callback
    })
    .catch(error=> {
        // ROLLBACK has been executed
        // error = rejection reason or error thrown
    });

ただし、@zabware が言ったように、Waterline ではなく、クエリを直接実行する必要があります。

コードがデータベースに依存しなくなるため、ウォーターラインの柔軟性が失われます。

参照:取引

于 2016-09-12T23:48:40.513 に答える