mvlyforever
mvlyforever
  • 发布:2023-06-26 22:14
  • 更新:2023-06-27 11:09
  • 阅读:310

数据库操作中使用了事务,但锁行失败。出现了重复的numID

分类:uniCloud

阿里云服务空间,代码如下:

const transaction = await this.db.startTransaction();  
              try {  
                  console.log("=====6666666",max_unum_id);  
                  let {data:idlist} = await transaction.collection('sys_base').doc(max_unum_id).get();  
                  console.log("=====77777777",idlist);  
                  let {value} = idlist;  
                  console.log("=====77777777");  
                  value++;  
                  let new_id = value;  
                  numID = new_id;  
                  Object.assign(par,{user_type:5,numID:new_id,score:0,geted_score:0,used_score:0,mInfo});  
                  console.log("=====88888888");  
                  res = await uniID.updateUser(par);  
                  await transaction.collection('sys_base').doc(max_unum_id).update({value});  
                  await transaction.commit()  
                  console.log("=====9999999");  
              } catch(e) {  
                  console.log("=====aaaaaaaa");  
                  await transaction.rollback()  
                  console.error(`-------transaction error`, e)  
                  throw Error(e.message);  
              }  

是和云函数,单实例并发度 10 的设置有关吗? 还是代码写的有问题。

2023-06-26 22:14 负责人:无 分享
已邀请:
DCloud_uniCloud_VK

DCloud_uniCloud_VK

代码问题, 先查询 再js处理+1 最后修改 这3步骤就一定会有并发问题,跟用不用事务没关系,这个操作可以一步完成, 用updateAndRetrun

  • mvlyforever (作者)

    感谢,回复问题的 老铁们 都是 hero!

    2023-07-06 10:07

要回复问题请先登录注册