是的,我在互联网上搜索和阅读了很多讨论,但所有这些都没有回答我的问题!
Angular/RxJs When should I unsubscribe from `Subscription`
Angular 2 Subscribe / Unsubscribe Observables in case of http calls
我的任务是: angular(2+)http响应流,我需要在重新使用之后或之前取消订阅吗? 说,我有:
private mystream$: Subscription;
public MyTask(){
if (this.mystream$){ this.mystream$.unsubscribe }
this.mystream$ = http.get(url).subscribe({
// to do
})
}
ngOnDestroy() {
if (this.mystream$) { this.mystream$.unsubscribe(); }
}
我已经阅读过,这个取消订阅onDestroy和流变量检查在使用之前是没有必要的,但我还没有被说服,因为我的http.put通过互联网呼叫,没有保证,它将是或必须是在申请之前完成再次调用MyTask()。
请告诉我为什么我错了,这个http.put流检查在使用和清理之前没有必要,甚至通过互联网拨打,我的用户也不是病人。
答案 0 :(得分:0)
此答案仅适用于您提到的情况,即针对get方法的http请求。
在角度https://angular.io/guide/observables的官方站点中,您将找到这样写的句子:“然后,订阅的用户会收到通知,直到功能完成或取消订阅为止。”这意味着订阅方法在完成后就不再被角度本身取消订阅。
要执行您创建的可观察对象并开始接收通知,请调用它的subscribe()方法,并传递一个观察者。这是一个JavaScript对象,用于定义您收到的通知的处理程序。 subscription()调用返回一个具有unsubscribe()方法的Subscription对象,您可以调用该方法停止接收通知。
以上说明表明,您可以使用unsubscribe()方法的其他优势来根据您的条件取消订阅。但永远不必强制取消订阅再使用。
现在,当我进入您的代码时,您正在ngOnDestroy中取消订阅该代码,该消息显示“现在是时候通知应用程序的另一部分该组件将要消失。”。与此组件相关的所有正在进行的订阅都已中止。与组件的变化成角度。 因此,在ngOnDestroy()方法中要求取消订阅没有任何意义。
如果我将重点放在http方法上,这是在[https://angular.io/guide/http]中找到的说明。
在您对由该方法返回的observable调用subscribe()之前,HttpClient方法不会开始其HTTP请求。 AsyncPipe自动为您订阅(和取消订阅)。
异步管道订阅Observable或Promise并返回其发出的最新值。发出新值时,异步管道会将要检查的组件标记为更改。当组件被销毁时,异步管道将自动退订,以避免潜在的内存泄漏。
一些通常我们通常使用unSubscribe()的情况
但是,是的,在某些情况下,您可能需要在ngOnDestroy()方法中取消订阅。但这里不需要。 从我提供的链接中浏览所有示例。它可以帮助您更好。希望我能有所帮助。