【问题标题】:Do we need to unsubscribe from http calls in Angular? [duplicate]我们是否需要取消订阅 Angular 中的 http 调用? [复制]
【发布时间】:2018-07-09 01:03:31
【问题描述】:

可能是一个愚蠢的问题,但无法轻易找到答案。

在一个 Angular 应用程序中,我使用 Rxjs 进行 http 调用以获取数据并将其发布到服务器。假设我有一个服务MyService,其方法如下:

getData() {
  this.http
      .get("mybackendurl/mydata")
      .map(res => res.json())
      .subscribe(data => this.data = data);
}

所以,假设我在几个地方使用这种方法,并且每次我导航到一个页面时。 不管这样做是否方便,我的问题是,这不像一个承诺,它开始和结束,据我所知,这会保持连接打开,直到源终止,所以我需要以某种方式取消订阅每次我完成请求?

由于订阅是在服务中而不是在组件中完成的,因此服务不会被破坏,因此我担心我可能会创建多个订阅和连接,而不是重复使用同一个。

谢谢!

【问题讨论】:

标签: angular typescript rxjs


【解决方案1】:

对于 Http 请求,您无需取消订阅。它实际上完成 observable,因此您将没有任何内存泄漏

您可以使用Subscription 对象的add 函数来检查这一点。取消订阅时调用此函数。您也可以通过将complete 函数(第三个参数)传递给subscribe 函数来检查,该函数将在请求之后调用,这意味着observable 已完成。

this.http
    .get("mybackendurl/mydata")
    .map(res => res.json())
    .subscribe(data => this.data = data)
    .add(() => console.log('Unsubscribed'));

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 2022-01-02
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多