【问题标题】:Do I need to unsubscribe from httpClient with subscription in component我是否需要通过组件中的订阅来取消订阅 httpClient
【发布时间】:2021-04-01 09:23:40
【问题描述】:

关于这个话题有很多问题和问题,但我有一个更具体的问题,问起来可能看起来很愚蠢,但我想确定一下。

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

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

服务

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

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

组件

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

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

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

【问题讨论】:

  • 如果调用者不知道,取消订阅也无妨。但是,我总是确保方法像 http 客户端一样返回冷的 observables,并且我使用字段作为热的 observables。 Hot observables 需要取消订阅。
  • 即使订阅在组件中,我是否认为它是“不”你不必这样做?还有你所说的“字段”是什么意思?

标签: angular httpclient subscription unsubscribe


【解决方案1】:

你应该退订

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

但是您在订阅块中的逻辑可能会导致问题, 例如,如果您的 api 调用花费了太长时间并且用户决定离开页面,那么在这种情况下,由于您没有取消订阅 observable,您的逻辑(例如登录或导航内部订阅)可能会导致问题

只是为了告诉你这个问题已经在这里回答了

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

详细答案可以参考这个链接

【讨论】:

  • 感谢您回答问题。我确实看到了该链接,但想知道是否因为我在一个文件中收到了 get 请求,然后在另一个文件中进行了订阅,这在退订等方面有什么不同。无论哪种方式退订似乎都更好,所以我会继续这样做 - 再次感谢。
  • 最终你发出一个 http 请求并订阅它是一回事
【解决方案2】:

是的。 这就是你的做法: 你创建一个变量:

private _subscription = new Subscription();

在您的代码中:

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

ngOnDestroy():

this._subscription.unsubscribe();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2014-10-29
    • 2018-07-23
    • 2019-05-19
    相关资源
    最近更新 更多