我是否需要在组件中取消订阅 httpClient

时间:2020-12-22 16:52:44

标签: angular httpclient subscription unsubscribe

关于这个话题有很多问题和评论,但我有一个更具体的问题,问起来似乎很愚蠢,但我想确定。

我了解到您无需取消订阅 angular 中的 HttpClient 调用,因为它会自动执行此操作。

但是如果我有一个具有此功能的单独服务:

服务

get() {
    return this.httpClient.get('someurlhere');
}

然后让一个组件像这样使用它:

组件

this.service.get().subscribe(() => {});

然后我是否需要取消订阅,因为订阅现在在组件中?

很想知道这是否有什么不同。

2 个答案:

答案 0 :(得分:2)

您应该退订

没有内存泄漏问题,因为http observables在第一次响应后完成。

但是您在订阅块中的逻辑可能会导致问题, 例如,如果您的 api 调用时间过长而用户决定离开页面,那么在这种情况下,由于您尚未取消订阅可观察对象,您的逻辑(例如,订阅中的登录或导航)可能会导致问题

只是通知你这个问题已经在这里回答

Is it necessary to unsubscribe from observables created by Http methods?

您可以参考此链接获取详细答案

答案 1 :(得分:1)

是的。 这是你如何做到的: 你创建一个变量:

private _subscription = new Subscription();

在您的代码中:

this._subscription.add(this.service.get().subscribe(() => {}););

ngOnDestroy():

this._subscription.unsubscribe();