Firebase firestore数据不一致



我正在开发一个项目,该项目由组成。和"unfollowing">功能就像一个社交媒体应用程序。每次用户关注或取消关注时,这两个功能都会运行四个不同的操作。
比方说,对于下面的特性,我有下面的代码

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已经执行,导致不一致。
是否有一种方法,如果四个动作中的任何一个失败,我可以移动到捕获块而不执行任何单个动作。

在这种情况下,您需要的是firestore批处理写操作,以确保跨写操作的原子性,因此您的写操作要么全部失败,要么全部成功,而不会留下数据不一致。

你可以这样做:

const batch = db.batch();
batch.set(ref, {...});
batch.set(ref, {...});
batch.update(ref, {...});
batch.update(ref, {...});
await batch.commit();

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

最新更新