小程序文档:
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/transaction.html
疑惑点:
问题举例:
账户aaa中有100元,并发发起多个转账操作-100,那么能否在事务中,通过 读账户余额,判断余额<100时就中断转账,而避免把账户减成负数。
例代码:
const result = await db.runTransaction(async transaction => {
const aaaRes = await transaction.collection('account').doc('aaa').get()
if (aaaRes.data.amount >= 100 ) {
const updateAAARes = await transaction.collection('account').doc('aaa').update({
data: {
amount: _.inc(-100)
}
})
const updateBBBRes = await transaction.collection('account').doc('bbb').update({
data: {
amount: _.inc(100)
}
})
console.log(`transaction succeeded`, result)
return {
aaaAccount: aaaRes.data.amount - 100,
}
} else {
await transaction.rollback(-1)
}
})
return {
success: true,
aaaAccount: result.aaaAccount,
}
问题:能够通过事务按上述代码来满足这种需求呢?
我模拟操作了几次,日志显示可以保证每次判断的是最新值,不知道这是不是快照隔离的1,2两点。
这里不应该是避免把账户减成负数,而是避免减了多次以后账户是0