最近几天,我遇到了Firebase + Flutter的问题。 问题在于事务并非每次都有效,这可能会在将来导致我的应用程序出现大问题。当我连续运行多个事务时,尤其会出现此问题。 Flutter的Discord上的开发人员告诉我Firebase具有内置队列,但似乎对我不起作用。
我尝试了不同的方法,最大的问题似乎是使用DocumentSnapshot.data从Firebase读取数据。
那是在我应用的主线程中
await updateLoyaltyPoints(firebaseUser, 10);
await updateUserData(firebaseUser);
这些是我正在使用的功能
Future<void> updateUserData(FirebaseUser user) async {
final DocumentReference postRef = _db.collection('users').document(
user.uid);
return _db.runTransaction((Transaction tx) async {
DocumentSnapshot postSnapshot = await tx.get(postRef);
if (postSnapshot.exists) {
await tx.update(postRef,
<String, dynamic>{
'uid': user.uid,
'email': user.email,
'displayName': user.displayName,
'lastseen': DateTime.now()
});
} else {
await tx.set(postRef,
<String, dynamic>{
'uid': user.uid,
'email': user.email,
'displayName': user.displayName,
'lastseen': DateTime.now(),
'loyaltypoints': 0
});
}
}).catchError((onError){
//Catch the error
});
}
Future<void> updateLoyaltyPoints(FirebaseUser user, num points) async {
final DocumentReference postRef = _db.collection('users').document(user.uid);
return _db.runTransaction((Transaction tx) async {
DocumentSnapshot postSnapshot = await tx.get(postRef);
int newloyalpoints = postSnapshot.data['loyaltypoints'] + points;
if (postSnapshot.exists) {
await tx.update(postRef,
<String, dynamic>{
'loyaltypoints': newloyalpoints
});
}
}).catchError((onError) {
//Catch the error
});
}
问题是有时有时候一切正常,每次我调用代码的第一个片段时,“忠诚点”值都会增加,“持久”值也会更改(是的,我知道使用Timestamp的这种方法将会不推荐使用)。但是有时候我会尝试10次,而Firebase却没有任何变化。我认为这可能是某种程度的延迟,但不是。即使在30分钟后,Firestore也不会更新。有趣的是,有时“忠诚度积分”会发生变化,而“持久”则不会。 非常感谢您的帮助。