节点js。 续订交易

我的数据库中有'money'字段的'Banks'表,

用户可以定期提款,但只有在银行存款> 0的情况下才能提款。

首先,我应该得到银行的实体,然后检查(银行。金额> amountToWithdraw),然后撤回这个金额。

想象一下当并发用户试图提取一些钱的情况。 在那个时候,我检查是否(bank.money> amountToWithdraw)其他用户可以执行提款操作,而实际银行金额在DB中会less一些。

如何将交易应用于寻找银行业务(如何locking银行实体)?

models.sequelize.transaction(function (t) { return models.Banks.findOne({where: { money: { $gt: 0 } }).then(function(bank){ //in this moment other user finished the same operation // how to lock access for editing bank object by other users after //findOne method? bank.money -= amountToWithdraw; return bank.save({transaction: t}); }) }) 

您可以在银行的行上使用锁。

它可以看起来像这样,取决于你的数据库。

 models.sequelize.transaction(function (t) { return models.Banks.findOne({where: { money: { $gt: 0 } }, lock: t.LOCK.UPDATE, transaction: t }).then(function(bank){ bank.money -= amountToWithdraw; return bank.save({transaction: t}); }) })