使用Firebase + Flutter进行交易时出现问题

时间:2019-04-01 21:34:42

标签: flutter

最近几天,我遇到了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也不会更新。有趣的是,有时“忠诚度积分”会发生变化,而“持久”则不会。 非常感谢您的帮助。

0 个答案:

没有答案