RxDB中的一个update conflict错误情况
最近公司项目中,要使用到RxDB来做前端浏览器数据库做缓存,在使用过程中,遇到了更新数据库时的一个冲突情况。
具体的更新代码如下:
const projectsChart = dbController.db.projects;
const projectQuery = projectsChart
.findOne()
.where("originalId")
.eq(projectOriginalId);
const projectFromDB = await projectQuery.exec();
await projectQuery.update({
$set: {
...resetProjectInfo(projectData),
},
});
在一般使用中,这样的更新方式理论上来讲没有太大的问题,但是因为写入数据库需要时间,所以在高频更新的时候,就会有可能出现更新冲突的情况,具体报错的信息如下:
{status: 409, name: "conflict", message: "Document update conflict", error: true}
查阅文档后,发现了另一个更新数据的函数 atomicUpdate,

官方的说明如图所示,通过函数来直接修改旧值并返回,即可实现数据库的修改。
所以修改后,新的更新函数可以这么写
const changeFunction = (oldData) => {
oldData.title = projectData.title;
oldData.updatedAt = projectData.updatedAt;
return oldData;
};
await projectFromDB.atomicUpdate(changeFunction);
经过测试,容易发生更新冲突 Document update conflict 也没有再出现了,问题应该得到了解决。

浙公网安备 33010602011771号