说我有一个“联系我们”按钮,其中包含对“联系我们”服务的订阅,该按钮在触发http请求后返回一个可观察到的内容。
如果用户单击按钮10次并发送10封电子邮件(需要),是否将运行10个并发订阅?如果是这样,在这种情况下进行订阅清理的最佳实践是什么?
答案 0 :(得分:1)
只需将您的订阅保存在一个属性中,然后检查它是否存在,没有订阅,如果没有订阅则
cacheSub: Subscription;
contactUs() {
if(!this.cacheSub) {
this.cacheSub = this.service.cacheSub.subscribe(....);
}
}
编辑
如果您想每次订阅并清理每个订阅,则可以
cacheSub: Subscription;
contactUs() {
this.cacheSub = this.service.cacheSub.subscribe(() => {
// some code here if you need it
this.cacheSub.unsubscribe();
});
}
或
contactUs() {
this.cacheSub && this.cacheSub.unsubscribe();
this.cacheSub = this.service.cacheSub.subscribe(() => {
// some code here if you need it
});
}
答案 1 :(得分:1)
如果您在订阅时向管道添加了take(1)
,则可以避免取消订阅-如果您要多次订阅
或者,在带有按钮的组件中进行单个预订,您可以在ngOnInit()
或constructor
中进行初始化。在private contactSubscription: SubscriptionLike
属性中保存对订阅的引用,然后在contactSubscription && contactSubscription.unsubscribe
ngOnDestroy()