angular - Firebase Firestore 在文档删除失败时返回 true
问题描述
我有一个使用 Firebase 的 Firestore 进行持久性的应用程序。我正在使用 Material 的 Snackbar 进行通知。我有我的服务..
deleteProvider(data) {
return this.db.collection(data.table).doc('xzc').delete();
}
其中数据参数只是一个对象,其中包含我要对其执行操作的表和我要删除的文档的 ID。
data: { table: 'providers', id: 'some firebase identifier'}
在我的组件中
onDeleteEntry(event) {
if (event.table === 'providers') {
this.providerService.deleteProvider(event)
.then(() => {
this.snackBar.open('Provider deleted');
})
.catch((error) => {
this.snackBar.open('Error deleting provider', error);
});
}
}
这会完美地删除文档,但在测试失败的情况下,它会返回 true。
例如,如果我将 'xyz' 硬编码到 .doc('xyz') 方法中。响应调用我的 next() 方法,而不是我的 catch()。
deleteProvider(data) {
return this.db.collection(data.table).doc('xyz').delete();
} // returns true on a non-existent document
Firebase 文档强调嵌套集合在删除后仍将保留这一事实,但除此之外,删除文档的基本功能很简单,除了
db.collection("cities").doc("DC").delete().then(function() {
console.log("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
我错过了什么?
TIA
解决方案
目前,如果文档不存在,delete
则不会失败。在某种程度上,这与 不一致create
,如果它事先存在,它确实会失败。
但是,看起来这个功能是/计划好的。在 Java SDK 中,delete
可以取一个Precondition
对象:
/**
* Deletes the document referred to by this DocumentReference.
*
* @param options Preconditions to enforce for this delete.
* @return An ApiFuture that will be resolved when the delete completes.
*/
@Nonnull
public ApiFuture<WriteResult> delete(@Nonnull Precondition options) {
WriteBatch writeBatch = firestore.batch();
return extractFirst(writeBatch.delete(this, options).commit());
}
在Precondition
中,有一个辅助方法:
/**
* Creates a Precondition that enforces that a document exists.
*
* @param exists Whether the document should exist.
* @return A new Precondition
*/
// TODO: Make public once backend supports verify.
@Nonnull
static Precondition exists(Boolean exists) {
return new Precondition(exists, null);
}
注意不是公开的。评论说它缺乏后端支持。只有 Firestore 团队知道它的当前状态。
推荐阅读
- amazon-web-services - CloudWatch Insights 查询 Lambda 中的错误日志
- javascript - 如何使用 ESLint 自定义规则分析 JS 文字/标识符
- typescript - 打字稿在速记构造函数中创建对象
- javascript - 为名字和姓氏创建一个正则表达式
- css - css溢出魔法有什么魔力
- netlogo - 如何迫使海龟只在半个世界移动?
- sql - Microsoft SQL Server - 复制表中的列,修改值和类型
- sql - SQL获取与前一个不同时的行号,无论该值是否显示在前面
- java - 如何使用 DynamoDB 实现一对多关系
- acumatica - Acumatica API 入门