首页 > 解决方案 > 如何知道特定调用是否删除了 FirebaseFirestore 中的文档?

问题描述

我写了这样的交易:

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) {

        }
    });

现在,当 2 个客户端 A 和 B 同时运行这个事务时,根据这段代码,只有一个可以成功,并执行相应的逻辑。

但是,不幸的是,由于以下错误,此交易失败:

事务中读取的每个文档也必须写入。

请帮忙,谢谢。

标签: androidgoogle-cloud-firestore

解决方案


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

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


推荐阅读