y***@163.com
y***@163.com
  • 发布:2021-06-24 14:56
  • 更新:2021-06-25 11:19
  • 阅读:863

uniCloud事务已正常提交后依然会提示事务不存在

分类:uniCloud

我的事务提交成功后,还是会报事务不存在,事务对象在提交后我是没有再引用的:

const db = uniCloud.database();  
const tx = await db.startTransaction();  
try {  
 // ...  
 const commitRes = await tx.commit();  
 console.log('事务提交成功...', commitRes)  
 const db = uniCloud.database();  
 // 查询计数  
 const countRes = await db.collection('cant-actions').  
     where({  
       target_type: c.params.target_type,  
       target_id: c.params.target_id,  
       action_type: c.params.action_type  
     }).  
     count()

2021-06-24 14:56 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

完整的代码贴一下,try之后还有代码吗?

y***@163.com

y***@163.com (作者)

完整代码大概长这样,是个云函数来的,用的腾讯云:

'use strict';  

const db = uniCloud.database();  

exports.main = async (data, context) => {  
  const tx = await db.startTransaction();  
  try {  
    // 查询是否已存在记录  
    const existsRes = await tx.collection('test').where({  
      action_type: data.action_type,  
      target_type: data.target_type,  
      target_id: data.target_id  
    }).get();  
    const existsData = _.get(existsRes, 'data[0]');  
    if (_.isEmpty(existsData)) {  
      // 不存在则新增  
      await tx.collection('test').add(data);  
    } else {  
      // 存在即删除  
      await tx.collection('test').doc(existsData._id).remove();  
    }  
    await tx.commit();  
    // 查询计数  
    const countRes = await db.collection('test').  
        where({  
          target_type: data.target_type,  
          target_id: data.target_id,  
          action_type: data.action_type  
        }).  
        count()  
    const countData = _.get(countRes, 'total')  
    const updateDoc = { tt_count: countData };  

    const updateRes = await db.collection('test').  
        doc(data.target_id).  
        update(updateDoc);  
    if (updateRes.updated <= 0) {  
      throw new Error(`更新总数失败`);  
    }  
    return { code: 0, data: 'ok' }  
  } catch (e) {  
    await tx.rollback(-100);  
    return { code: -1, msg: 'error' }  
  }  
};  
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

这里抛出的错误应该是 await tx.rollback(-100); 抛出的,应该是接收到了下面的错误执行了rollback,更新成功数据相同的情况下updated也是为0的

if (updateRes.updated <= 0) {    
      throw new Error(`更新总数失败`);    
    }  
  • y***@163.com (作者)

    那我再调下看看

    2021-06-25 14:55

该问题目前已经被锁定, 无法添加新回复