我与Flutter和Firestore做一个随机的1:1聊天应用程序。 但是当我连接第二个用户聊天时,我有比赛条件。
这是我的客户端应用代码,用于将第二个用户添加到Firestore(第一个用户已添加到Firestore文档中):
await chatRoomReference.setData({
‘secondUserUID': uid,
});
第二位用户点击聊天时,我是删除选项,可从所有客户端UI进入此聊天室。 但是如果第三位用户同时点击聊天(在UI从流中获取更新之前),则可能会将他也添加到数据库中。聊天不允许这样做。
如何避免比赛状况?
谢谢!
更新:
每个聊天用户都作为新文档添加到单独的用户聊天集中。
答案 0 :(得分:0)
我认为您的按钮应该先检查聊天室中的人数,然后再加入聊天室。
checkBeforeJoinTheChatRoom()
.then((numbOfPeople){
if(numbOfPeople < 2){
joinChat();
}
}
)
编辑:在您的情况下,交易可能有效:
final DocumentReference postRef = Firestore.instance.document('posts/123');
Firestore.instance.runTransaction((Transaction tx) async {
DocumentSnapshot postSnapshot = await tx.get(postRef);
if (postSnapshot.exists) {
await tx.update(postRef, <String, dynamic>{'likesCount': postSnapshot.data['likesCount'] + 1});
}
});