android - 如何知道特定调用是否删除了 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 同时运行这个事务时,根据这段代码,只有一个可以成功,并执行相应的逻辑。
但是,不幸的是,由于以下错误,此交易失败:
事务中读取的每个文档也必须写入。
请帮忙,谢谢。
解决方案
听起来您实际上希望事务按照指示失败(因为它处于不应发生文档更新的状态)。首先,考虑忽略该消息,因为它会告诉您交易未成功的原因,并且您知道这不是问题。
其次,如果您不喜欢该错误消息,请尝试在不应对先前读取的文档进行更改的情况下从您的事务处理程序中抛出一个新的未经检查的异常(例如 RuntimeException)。您可能会在任务错误处理程序中收到一条新的错误消息,但结果将是相同的 - 没有对任何文档进行任何更改。
推荐阅读
- javascript - 如何在 HTML 和 CSS 中制作 14x5 的单选按钮网格
- reactjs - FirebaseError:安装:缺少应用配置值:“projectId”(安装/缺少应用配置值)
- python - 需要按特定顺序从列表中获取索引
- scala - Scala 2 将方法附加到类主体(元编程)
- python - 部署到heroku后无法在Django中加载照片
- python - 我试图创建一个密码,但它两次更改同一个字母
- android - Splashscreen API 未显示图标
- dynamics-nav - Microsoft Navision /Dynamics 导航数据库
- validation - 如何在 go-ozzo/ozzo-validation 中使用 Min() 或 Max() 规则验证结构字段的长度
- java - 如何在 JAVA 中使用 MongoDB 聚合组操作方法