我是否必须始终取消订阅我已订阅的Observables?

时间:2019-07-03 09:23:46

标签: angular rxjs

我有一个组件,该组件从数据服务中调用返回可观察到的方法。取消订阅ngOnDestroy方法中的可观察对象是否必须?

服务

public class BlogService {

   public getPosts(): Observable<Array<Post>> {
       return this.http.get('');
   }
}

组件

public class ListComponent implements OnInit {

   constructor(private blogService: BlogService) {}

   public ngOnInit() {
     this.blogService.getPosts().subscribe(posts => this.posts = posts);
   }
}

3 个答案:

答案 0 :(得分:2)

这就是我处理退订的方式:

  • 响应ritaj所说的HttpServices完成后->无需取消订阅
  • 自行创建的主题,可观察对象等应该取消订阅,或者您自己完成
  • 自动以角度取消订阅的异步管道
  • 使用库中的可观测对象->视天气情况而定,所提供的可观测对象是否完成
  • 使用诸如take(1)或takeUntil之类的管道函数也可以用于退订

答案 1 :(得分:1)

在您的情况下这不是必需的,但是可以做为一种额外的预防措施,以防将来您更改getPosts方法的实现。

通常:

有限的可观察对象,例如从Angular Http Client方法返回的那些,不需要您取消订阅,因为它们将完成,届时将自动取消订阅任何观察者。

无限可观测对象(例如NgRx商店)确实需要您取消订阅,因为它们尚未完成。

答案 2 :(得分:0)

如其他两个答案中所述,您只需要取消订阅Infinite Observables即可,而无需取消订阅。例如:

Infinite Observables — When you have an infinite sequence, you should unsubscribe, for example when using the interval() or the fromEvent() observables.

下面的文章提供了一些您需要/不需要退订的方案示例。

src:https://netbasal.com/when-to-unsubscribe-in-angular-d61c6b21bad3