收藏
回答

一次更新多条记录,中间失败如休退回原来的状态?

我要一次更新三个集合,三条更新语句,如果中间一条失败,如何让第一条已经更新的记录返回原来的状态,我考虑用starttransaction, 但是方档说只能对一条记录使用,而我在筛选是用了where语句,哪个前辈有好的办法解决,先在这里跪谢了

回答关注问题邀请回答
收藏

1 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-04-27

    可以直接使用事务呀

    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
        }
      }
    

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    2020-04-27
    有用
    回复 12
    查看更多(7)
登录 后发表内容
问题标签