如何知道特定呼叫是否删除了FirebaseFirestore中的文档?

时间:2019-09-30 20:54:17

标签: android google-cloud-firestore

我写了这样的交易:

db.runTransaction(new Transaction.Function<Void>() {
            @Override
            public Void apply(Transaction transaction) throws FirebaseFirestoreException {
                DocumentSnapshot documentSnapshot = transaction.get(deleteRef);
                if(documentSnapshot.exists())
                {
                    transaction.delete(deleteRef);    
                }
            return null;
        }
    }).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
        // implement logic
        }
    }).addOnFailureListener(new OnFailureListener() {
         @Override
         public void onFailure(@NonNull Exception e) {

        }
    });

现在,当两个客户端A和B同时运行此事务时,根据此代码,只有一个可以成功,并且将实现相应的逻辑。

但是,不幸的是,由于以下错误,该事务失败:

  

在交易中读取的每个文档也必须写入。

请帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

这听起来像您实际上希望事务按照指示失败(因为它处于不应进行文档更新的状态)。首先,请考虑忽略该消息,因为这会告诉您为什么事务未成功,并且您知道这不是问题。

第二,如果您不喜欢该错误消息,请尝试在不应该对先前阅读的文档进行任何更改的情况下,从事务处理程序中抛出一个新的未经检查的异常(例如RuntimeException)。您可能会在任务错误处理程序中收到一条新的错误消息,但结果将是相同的-没有对任何文档进行任何更改。

答案 1 :(得分:0)

尝试替换以下内容:

if(documentSnapshot.exists())
{
  transaction.delete(deleteRef);    
}

具有以下内容:

transaction.delete(deleteRef); 
相关问题