收藏
回答

transaction error {}?

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 工具 wx4e1ba30bdbcb271d cloud1-3g0985ox05f41f2d 2.14.1

报错:内容如下,具体什么错看不到。

日志内容 Request ID: 10683c1f-4624-11ec-9cce-064c6fd90d29

执行时间: 308ms内存使用: 25.91 MB

返回结果

{"success":false,"error":{}}

日志

START

docId1 = 18ed0968619274b40573b419494a2a8e, openid1 = od1W_5VaHYLBdCUrmsIbwUjSq26E

docId2 = 18ed0968619274b10573b3df269fb06c, openid2 = od1W_5Wuu0W12WuS0-0gD4jchsew

当前未指定env,将默认使用第一个创建的环境!

当前未指定env,将默认使用第一个创建的环境!

当前未指定env,将默认使用第一个创建的环境!

当前未指定env,将默认使用第一个创建的环境!

当前未指定env,将默认使用第一个创建的环境!

当前未指定env,将默认使用第一个创建的环境!

transaction error {}

REPORT RequestId:10683c1f-4624-11ec-9cce-064c6fd90d29 Duration:308ms Memory:256MB MemUsage:25.910156MB

END


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

1 个回答

  • 李刚
    李刚
    2021-11-15

    云函数是给两个记录使用事务保证同时更新成功,代码如下:

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    
    cloud.init()
    const db = cloud.database({
      // 该参数从 wx-server-sdk 1.7.0 开始支持,默认为 true,指定 false 后可使得 doc.get 在找不到记录时不抛出异常
      throwOnNotFound: false,
    })
    const _ = db.command
    
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      let docId1 = event.docId1
      let openid1 = event.openid1
      let docId2 = event.docId2
      let openid2 = event.openid2
      console.log('docId1 = ' + docId1 + ', openid1 = ' + openid1)
      console.log('docId2 = ' + docId2 + ', openid2 = ' + openid2)
      try {
        const result = await db.runTransaction(async transaction => {
          const doc1 = await transaction.collection('matchpool').doc(docId1).get()
          const doc2 = await transaction.collection('matchpool').doc(docId2).get()
    
    
          if (doc1.data && doc2.data) {
            const updateDoc1Res = await transaction.collection('matchpool').doc(docId1).update({
              data: {
                oppositeDocid: docId2,
                oppositeOpenid: openid2
              }
            })
    
    
            const updateDoc2Res = await transaction.collection('matchpool').doc(docId2).update({
              data: {
                oppositeDocid: docId1,
                oppositeOpenid: openid1
              }
            })
    
    
            console.log('transaction succeeded', result)
    
    
            // 会作为 runTransaction resolve 的结果返回
            return {
              doc1: doc1,
              doc2: doc2
            }
          } else {
            // 会作为 runTransaction reject 的结果出去
            await transaction.rollback(-100)
          }
        })
    
    
        return {
          success: true,
          doc1: result.doc1,
          doc2: result.doc2
        }
      } catch (e) {
        console.error('transaction error', e)
        return {
          success: false,
          error: e
        }
      }
    }
    
    2021-11-15
    有用
    回复 2
登录 后发表内容
问题标签