Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要取消订阅Firestore/Angularfire2订阅_Angular_Firebase_Ionic3_Google Cloud Firestore_Angularfire2 - Fatal编程技术网

需要取消订阅Firestore/Angularfire2订阅

需要取消订阅Firestore/Angularfire2订阅,angular,firebase,ionic3,google-cloud-firestore,angularfire2,Angular,Firebase,Ionic3,Google Cloud Firestore,Angularfire2,我像这样使用Firestore 用例1: 联系人$:可见; 构造函数(){ } ionViewDidEnter(){ this.contacts$=this.contactProvider.getSpecificUserContacts(this.authenticationProvider.user.uid).valueChanges(); this.contacts$.pipe(first()).subscribe(res=>{}, err=>{}, () => { } ); } 用例2

我像这样使用Firestore

用例1:

联系人$:可见;
构造函数(){
} 
ionViewDidEnter(){
this.contacts$=this.contactProvider.getSpecificUserContacts(this.authenticationProvider.user.uid).valueChanges();
this.contacts$.pipe(first()).subscribe(res=>{},
err=>{},
() => { }
);
}
用例2:

getAllContactCategories(){
this.categories$=this.categoryProvider.getAllContactCategories().valueChanges();
此.categories$.subscribe(res=>{
this.categorySortedList=res;
},
错误=>{}
);
}
但是我从来没有退订过它。那么我需要这样做吗?否则,会导致内存泄漏并耗尽电池使用量吗? 我知道我们不需要
unsubscribed
angular
HTTP
服务,因为它是由框架本身自动完成的。那么Firestore/Angularfire2
可观测值呢?我从未在firestore书籍或文章等方面看到过这样的模式。

通过使用操作员,您可以在最初触发订阅后直接自动取消订阅。但要回答你的具体问题

在订阅组件中的可观察对象时,几乎总是在组件被销毁时安排取消订阅。 有一些例外的观测结果是不必要的。ActivatedRoute观测值属于例外。 激活的路由及其可观察对象与路由器本身隔离。当不再需要路由组件时,路由器会将其销毁,注入的ActivatedRoute也随之消亡

无论如何都可以随意取消订阅。这是无害的,从来都不是一个坏习惯

通常,如果您希望控制何时取消订阅,可以将可观测值分配给变量

const subscription = this.subscription$.valueChanges().subscribe(...);
然后对新创建的变量调用unsubscribe

subscription.unsubscribe();

是的,取消订阅是很好的。你可以试试这个

  contactsSub: Subscription;
构造函数(){
}

ionViewDidEnter(){ ... }


来自angularfire2代表:

first()
在收到第一个值后自动取消订阅。好的,很高兴知道这一点。用例2呢@Jeffreyroosendali对firestore一无所知,只是想指出关于
first()
。类似于
take(N)
和'takeUntil(X)这样的管道也是如此。它有一个很好的“官方”解决方案,在选中标记的答案(
takeUntil()
方法)中,我知道定制订阅事件的这种模式。但对于firestore/anglurafire2,如何处理?你有没有看到任何文档或类似的东西作为参考?@Sampath Angularfire使用RxJS observates。这里有一个官方文档的链接是的,Angular
HTTP
服务也使用
RxJS
。但我们不需要在那里手动操作。为什么我们需要它?我想看一份关于它的官方文件或文章。我还没找到答案。一些内置的角度观测值可以控制它们的生命周期,因此当调用组件onDestoy时,它们会自动取消订阅。在我脑海中,这些包括HTTPClient、路由器和其他一些。通常,如果它不是@angular sdk的一部分,您应该手动取消订阅。我看看是否能找到一些资源来支持我。@Sampath做了一些挖掘,我似乎找不到自动处理退订的完整列表,但你可以在我更新的答案中找到官方文档的摘录。希望这对您有所帮助,这对任何定制活动的订阅都有好处。我的具体问题是
Firestore/Angularfire2
。有使用此模式的引用吗?
  ionViewDidLeave{
  this.contactsSub.unsubscribe();
  }