我在Nodejs中使用sequalize事务,但我的问题是它不会在Transaction中占用我的users表并更新我的表
return sequelize.transaction(function (t) { var Users = objAllTables.users.users(); return Users.update(updateUser,{ where: { uid: sessionUser.uid,status: 'ACTIVE' } },{ transaction: t }).then(function (result) { return Utils.sendVerificationEmail(sessionUser.uid,sessionUser.user_email) .then(function(data){ data = false; if(data == false){ throw new Error('Failed Email'); } }); }).then(function (result) { console.log(result); // Transaction has been committed // result is whatever the result of the promise chain returned to the transaction callback }) }).catch(function(err){ res.send({message:err.message}) })
安慰:
Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): START TRANSACTION; Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): SET autocommit = 1; Executing (default): UPDATE `users` SET `username`='edited' WHERE `uid` = 20 AND `status` = 'ACTIVE' Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): ROLLBACK;
正如您在控制台中看到的更新查询用完了事务
解决方法
事务密钥必须在选项中:
return Users.update(updateUser,status: 'ACTIVE' },transaction: t //second parameter is "options",so transaction must be in it })