私の問題は、複雑なクエリチェーンがあり、このトランザクションの誰かが失敗した場合にロールバックが行われることです。 私はSailsのトランザクションについて読んだことがあります。デフォルトでは、各トランザクションがPostgresとの新しい接続を行うため、Sailsはトランザクションをサポートしていません。 それでは、Sailsとの取引をどのように使用できますか?SailsJでPostgreSQLトランザクションを使用するにはどうしたらいいですか?
2
A
答えて
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を試みる場合があります。
またSails.js best practice in using transactions with promises (Postgres)をチェックして、Sails.js + Postgres: issue with transactions
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など言った:
あなたのコードはデータベースにとらわれないため、水の柔軟性が失われます。それ以上。
も参照してください:Transactions