小程序
小游戏
企业微信
微信支付
扫描小程序码分享
我要一次更新三个集合,三条更新语句,如果中间一条失败,如何让第一条已经更新的记录返回原来的状态,我考虑用starttransaction, 但是方档说只能对一条记录使用,而我在筛选是用了where语句,哪个前辈有好的办法解决,先在这里跪谢了
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
可以直接使用事务呀
try { const transaction = await db.startTransaction() // 需要更新的记录进行get,以便锁住,并且只能是doc().get()单条记录,where().get()会报错 const aaaRes = await transaction.collection('a').doc(aid).get() const bbbRes = await transaction.collection('b').doc(bid).get() const cccRes = await transaction.collection('c').doc(cid).get() const updateAAARes = await transaction.collection('a').doc(aid).update({...}) // 更新a不成功,抛出错误异常,事务自动回滚 if (!updateAAARes.stats.updated){ throw { msg:'a update error' } } const updateBBBRes = await transaction.collection('b').doc(bid).update({...}) // 更新b不成功,抛出错误异常,事务自动回滚 if (!updateBBBRes.stats.updated){ throw { msg: 'b update error' } } const updateCCCRes = await transaction.collection('c').doc(cid).update({...}) // 更新c不成功,抛出错误异常,事务自动回滚 if (!updateCCCRes.stats.updated){ throw { msg: 'c update error' } } await transaction.commit() console.log(`transaction succeeded`) return { success: true } } catch (e) { console.error(`transaction error`, e) return { success: false, error: e } }
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
可以直接使用事务呀
try { const transaction = await db.startTransaction() // 需要更新的记录进行get,以便锁住,并且只能是doc().get()单条记录,where().get()会报错 const aaaRes = await transaction.collection('a').doc(aid).get() const bbbRes = await transaction.collection('b').doc(bid).get() const cccRes = await transaction.collection('c').doc(cid).get() const updateAAARes = await transaction.collection('a').doc(aid).update({...}) // 更新a不成功,抛出错误异常,事务自动回滚 if (!updateAAARes.stats.updated){ throw { msg:'a update error' } } const updateBBBRes = await transaction.collection('b').doc(bid).update({...}) // 更新b不成功,抛出错误异常,事务自动回滚 if (!updateBBBRes.stats.updated){ throw { msg: 'b update error' } } const updateCCCRes = await transaction.collection('c').doc(cid).update({...}) // 更新c不成功,抛出错误异常,事务自动回滚 if (!updateCCCRes.stats.updated){ throw { msg: 'c update error' } } await transaction.commit() console.log(`transaction succeeded`) return { success: true } } catch (e) { console.error(`transaction error`, e) return { success: false, error: e } }
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人