Node.js 7はすでにasync/await構文をサポートしていますが、async/awaitを使用するとトランザクションが有効にならない場合は、トランザクションを続行します。Node.js 7 async/awaitでsequelize transactionを使用する方法は?
8
A
答えて
21
let transaction;
try {
// get transaction
transaction = await sequelize.transaction();
// step 1
await Model.destroy({where: {id}, transaction});
// step 2
await Model.create({}, {transaction});
// commit
await transaction.commit();
} catch (err) {
// Rollback transaction if any errors were encountered
await transaction.rollback();
}
3
上記のコードは破壊呼び出しにエラーがあります。
await Model.destroy({where: {id}, transaction});
トランザクションはオプションオブジェクトの一部です。エラーが発生した場合
await sequelize.transaction(async t=>{
const user = User.create({ name: "Alex", pwd: "2dwe3dcd" }, { transaction: t})
const group = Group.findOne({ name: "Admins", transaction: t})
// etc.
})
は、取引がされています
+1
上記の答えを修正しました - ありがとう – pkyeck
1
user7403683によって与えられた答えは/次のようなスタイルが見えるかもしれ待つ非同期で管理されていないトランザクション(http://docs.sequelizejs.com/manual/tutorial/transactions.html#unmanaged-transaction-then-callback-)
管理のトランザクションのための非同期/のawait方法を説明し自動的にロールバックされます。
0
回答は「管理されていない取引」です。commit
とrollback
を明示的に呼び出す必要があります。ただ、取引機能の内部でエラーをスローし、ロールバックするには
try {
// Result is whatever you returned inside the transaction
let result = await sequelize.transaction(async (transaction) => {
// step 1
await Model.destroy({where: {id}, transaction});
// step 2
return await Model.create({}, {transaction});
});
// In this case, an instance of Model
console.log(result);
} catch (err) {
// Rollback transaction if any errors were encountered
console.log(err);
}
:「管理のトランザクションを」たい人のために、これは、それがどのようになるかである
try {
// Result is whatever you returned inside the transaction
let result = await sequelize.transaction(async (transaction) => {
// step 1
await Model.destroy({where: {id}, transaction});
// Cause rollback
if(false){
throw new Error('Rollback initiated');
}
// step 2
return await Model.create({}, {transaction});
});
// In this case, an instance of Model
console.log(result);
} catch (err) {
// Rollback transaction if any errors were encountered
console.log(err);
}
関連する問題
- 1. belongsToManyをSequelizeで使用する方法?
- 2. SequelizeでfindOrCreateを使用する方法
- 3. SQL ServerでBEGIN TRANSACTIONをwhileループで使用する方法?
- 4. Sequelize Transaction Bulk Update続いてBulk Create
- 5. node.jsを使用してトリガーを実装するsequelizeとフック
- 6. node.jsでプロトタイプを使用する方法
- 7. ノードでSequelizeを使用してSELF JOINする方法
- 8. SequelizeでSequelize
- 9. sequelize(node.js)でエスケープ文字列を使用する必要がありますか?
- 10. @TypeDefをHibernate Transactionで永続性なしで使用する方法
- 11. sequelizeを使用して既存のテーブルからデータを選択する方法
- 12. sequelizeとpostgresを使用して一括挿入する方法
- 13. Node.js 7.6+で非同期なしでビルトイン待機を使用する方法はありますか?
- 14. Node.js Sequelizeでファイルからデータベースを挿入
- 15. node.jsのselect文(MySQL)で変数を使用する方法は?
- 16. ホストサーバーでnode.jsを使用する方法は?
- 17. node.jsバックエンドでフォントを使用する方法は?
- 18. SequelizeでJOINを使用する
- 19. use bcrypt asyncでSequelizeを使用する
- 20. Sequelizeを使用してMSSQLストアドプロシージャを呼び出す方法
- 21. SequelizeでCASE WHEN式を使用するには?
- 22. sequelize + mysql + express jsを使ってファイルをアップロードする方法は?
- 23. Sequelizeを使って仮想列をクエリする方法は?
- 24. wordpressでmysql transactionを使用するには?
- 25. PREPARE TRANSACTIONの作業方法
- 26. Bluemixでnode.jsアプリケーションでシングルサインオンを使用する方法
- 27. node.jsでmysql接続とプールでシングルトンデザインパターンを使用する方法
- 28. Node.jsを使用してリモートブランチを削除する方法は?
- 29. js(node.js)を使用してベアラトークンを作成する方法は?
- 30. node.jsとelectronを使用してサーバーをセットアップする方法は?
これは動作しません。この場合の 't'はPromiseであり、トランザクションオブジェクトではありません。 – Pier
@Pierは、sequelize.transaction()を待ち、その結果を取得します。 tは約束ではなく、約束の結果です。 –
ああ、正解、私は完全にそれを逃した – Pier