我们是否需要取消订阅Angular中的http调用?

时间:2018-01-30 07:51:42

标签: angular typescript rxjs

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

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

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

所以,假设我在几个地方使用这种方法,每次我导航到一个页面。 无论以这种方式做到这一点的方便性,我的问题是,这不是一个Promise,它开始并完成,据我所知这保持连接打开直到源终止,所以我需要以某种方式取消订阅每次我完成请求?

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

谢谢!

1 个答案:

答案 0 :(得分:9)

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

您可以使用add对象的Subscription功能进行检查。订阅取消订阅时会调用此函数。您也可以通过将complete函数(第3个参数)传递给subscribe函数进行检查,该函数将在请求后调用,这意味着可观察函数已完成。

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