"addUser"関数があり、 "Account"テーブルと "User"テーブルにレコードを挿入する必要があるので、2つのステップがトランザクション内になければならないため、私たちは「チーム」テーブルにレコードを挿入し、上記の関数を使用して管理者ユーザーを作成する必要があるの内側に、別の「addTeam」機能では、しかしネストされたトランザクションを扱う簡単な方法
function addUser (userName, password) {
sequelize.transaction(function() {
return AccountModel.create(...)
.then(UserModel.create(...))
})
}
:以下のコードを記述します。この関数はまた、トランザクション内でラップする必要があります。
だから問題は、「アドユーザー」機能は、時には新しいトランザクションを開始し、そして時にはに渡されたトランザクションを使用する必要がありますする必要があり、来て最も明白な方法は以下の通りです:。もちろん
function addUser (userName, password, transaction) {
let func = function (t) {
return AccountModel.create(..., t)
.then(()=>UserModel.create(..., t)));
if (transaction) func(t);
else sequelize.transaction(x=>func(t));
}
function addTeam() {
sequelize.transaction(x=> {
TeamModel.create(..., x)
.then(y=>addUser(x));
});
}
、それがありますひどい。簡単に、以下のように、発信者に対して完全に透過的にトランザクションを聞かせてそれに対処する方法:
@Transaction
async function addUser(userName, password) {
await AccountModel.create(...);
await UserModel.create(...);
}
@Transaction
async function addTeam(...) {
await TeamModel.create(...);
await addUser(...);
}
は動作しません。 –