angular - Firebase Firestore 在 for 循环中取消订阅 SnapShot
问题描述
我正在使用firebase firestore,并且我从集合中获取了一组数据,这些数据是我在for循环中的快照中拍摄的。
为了避免多次查询数据库,我创建了数据服务机制来使用本地数组进行显示,并且我正在通过 rxjs 主题行为来处理它。
这里的问题是,如果用户从应用程序中删除了一些文档,我已经从 firebase 中删除了它,然后从本地仍然是它的快照,我们必须手动取消订阅
我知道这样的基本方法..
var unsubscribe = db.collection("cities")
.onSnapshot(function () {});
// ...
// Stop listening to changes
unsubscribe();
这不适用于我的情况,因为我正在像这样在 for 循环中拍摄快照
getSnapShot() {
this.global.currentUser.shortlist.forEach((propertyID: any) => {
this.getSnapShotByID(ID);
});
}
getSnapShotByID(ID) {
// return new Observable((observe: Observer<any>) => {
this.db.collection('properties').doc(propertyID).onSnapshot((snapshot: any) => {
//HERE I AM ADDING PROPERTY IN LOCAL ARRAY
....
}
现在,当用户从集合中删除属性时,我必须取消订阅,否则它将继续侦听和更改我的本地数组
有什么建议吗?
解决方案
对于您的用例,我可以推荐以下方法
当您在 RXJS 主题中获取整个数据副本时。在 for 循环中发生删除的地方,删除现有 Rxjs 行为主题中不需要的数据,并在删除后使用 next 运算符再次重新推送新数据。因此,您的 observable 也会使用最新数据以及 firebase 数据库进行更新
推荐阅读
- r - 如何获取qqnorm图中x轴的值
- html - 如何正确地将订单列表文本与数字对齐
- reactjs - 自定义对话框材质 UI
- mysql - 如何在 SCHEMA 中显示所有表的列标题
- c# - 有没有办法用 .Net Core 中的配置值覆盖已通过自动属性初始化语法初始化的集合?
- python-3.x - 从另一个数据框中搜索(行值)数据
- quickbooks - 在 QuickBooks item api 中仅过滤 Service 和 NonInventory 类型的项目
- c++ - WEBOTS - 将控制器数据写入外部 CSV 文件
- gradle - 如何为 Android aar 库的 Google OSS 许可证插件提供许可证信息?
- android - 安装Referrer Library v1.1 添加权限