首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防火墙数据不一致

防火墙数据不一致
EN

Stack Overflow用户
提问于 2021-02-14 17:27:01
回答 1查看 101关注 0票数 0

我正在开发一个项目,其中包括一个“跟随”“”,取消“”功能,就像社交媒体应用程序一样。每次用户跟踪或取消跟踪时,都会为这两个功能运行四个不同的操作。

假设,对于下面的特性,我有以下代码:

代码语言:javascript
复制
export const followUser = async (profile)=>{
  try{
     await db.collection('_').doc('_').set({...});       //line 1
     await db.collection('_').doc('_').set({...});       //line 2
     await db.collection('_').doc('_').update({...});    //line 3
     await db.collection('_').doc('_').update({...});    //line 4
  }
  catch(error){
     throw error;
  }
}   

我发现可能存在数据不一致性,因为由于某种原因,如果line3失败,它将进入catch块,但是已经执行了line1line2,造成了不一致性。

是一种方法,如果这四个操作中的任何一个失败,我可以移动到捕捉块而不执行任何一个操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-14 17:43:40

在这种情况下,您需要的是确保跨写原子性的防火墙批写,所以您的所有写操作要么都失败了,要么它们都成功地没有留下任何数据不一致的地方。

所以你可以做这样的事情:

代码语言:javascript
复制
const batch = db.batch();

batch.set(ref, {...});
batch.set(ref, {...});
batch.update(ref, {...});
batch.update(ref, {...});

await batch.commit();

请注意,一个批处理最多可以包含500个写操作(设置、更新和删除操作)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66198110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档