云数据库开发中的事务处理这个例子感觉不对呀,太困惑了,能帮忙看看吗?
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Database.startTransaction.html 如上面的链接提供的例子。这个里边给出的例子是从A用户转10元给B用户,如果用事务的的话,应该是在操作A-10完成,B+10失败的时候才需要进行事务的rollback呀?为啥例子中是查找A,B账号中某一个不存在就进行rollback? 而没有放在A-10,B+10这两个成功与否上?另外,如果try里边的操作如果发生异常(例如:恰巧是A-10操作完成了,而B+10操作抛异常),被catch 捕获到,那么这个时候不应该进行rollback 吗? const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database({
throwOnNotFound: false,
})
const _ = db.command
exports.main = async (event) => {
try {
const transaction = await db.startTransaction()
const aaaRes = await transaction.collection('account').doc('aaa').get()
const bbbRes = await transaction.collection('account').doc('bbb').get()
if (aaaRes.data && bbbRes.data) {
const updateAAARes = await transaction.collection('account').doc('aaa').update({
data: {
amount: _.inc(-10)
}
})
const updateBBBRes = await transaction.collection('account').doc('bbb').update({
data: {
amount: _.inc(10)
}
})
await transaction.commit()
console.log(`transaction succeeded`)
return {
success: true,
aaaAccount: aaaRes.data.amount - 10,
}
} else {
await transaction.rollback()
return {
success: false,
error: `rollback`,
rollbackCode: -100,
}
}
} catch (e) {
console.error(`transaction error`, e)
return {
success: false,
error: e
}
}
}