const db = uniCloud.database();
const _trans = await db.startTransaction();
await _trans.collection('Base_Subway').remove();
await _trans.collection('Base_Subway').add(_lineDatas);
await _trans.commit();
- 发布:2023-12-31 14:55
- 更新:2024-10-12 17:37
- 阅读:311
产品分类: uniCloud/App
示例代码:
操作步骤:
const db = uniCloud.database();
const _trans = await db.startTransaction();
await _trans.collection('Base_Subway').remove();
await _trans.collection('Base_Subway').add(_lineDatas);
await _trans.commit();
const db = uniCloud.database();
const _trans = await db.startTransaction();
await _trans.collection('Base_Subway').remove();
await _trans.collection('Base_Subway').add(_lineDatas);
await _trans.commit();
预期结果:
能用事务对多次数据修改操作进行同步管理
能用事务对多次数据修改操作进行同步管理
实际结果:
只要使用事务,代码报错
只要使用事务,代码报错
bug描述:
const db = uniCloud.database();
const _trans = await db.startTransaction();
await _trans.collection('Base_Subway').remove();
await _trans.collection('Base_Subway').add(_lineDatas);
await _trans.commit();
运行上面的代码,报错如下:
TypeError: (intermediate value).deleteMany is not a function
阿里云的事务不能用,只要不使用事务,上面这段代码没有问题。
y***@126.com (作者)
我的目的是清空这个表后重新填充新内容。如果将上面代码改成下面这样是可以的。
const db = uniCloud.database();
await db.collection('Base_Subway').remove();
await db.collection('Base_Subway').add(_lineDatas);
y***@126.com (作者)
另外,我发现不止这一个地方有这个问题,同样的代码在支付宝云上用事务没有问题,但是转到阿里云上就报上面的错误。只要我将调用事务的代码关闭就可以用了。
所以这个并不是我写的代码问题,可以肯定是阿里云上不能使用事务。
我也碰到这个问题。
经我的测试,发现了它们的区别,如下:
1)阿里云的事务不支持一次删除多行的操作,会报:TypeError: (intermediate value).deleteMany is not a function
2)支付宝云的事务支持一次删除多行的操作
上述1)、2)使用的是相同的代码,如下:
const db = await uniCloud.database()
const transaction = await db.startTransaction()
try {
// 注意:支付宝云支持在事务里一次删除多行
const res = await transaction.collection('biz-plan-template')
.where({
'_id': db.command.in(idList)
})
.remove()
console.log('~~~~~ 删除结果:', res);
await transaction.commit()
console.log('事务已提交!')
return {
errCode: 0,
errMsg: '已删除' + idList.length + '条记录'
}
} catch (e) {
await transaction.rollback()
console.error(`事务异常!`, e)
throw e
}
y***@126.com (作者)
你们自己写几行代码测试下就知道了啊!
2024-01-03 17:48