代码之家  ›  专栏  ›  技术社区  ›  Kristian Mladenov

Angular/RxJS Observables是否自动处理取消订阅

  •  1
  • Kristian Mladenov  · 技术社区  · 2 年前

    我听说Angular会自动处理其自己的observable的退订,因此不需要手动退订observable。

    我留下的印象是,如果Observable是定制的,我应该取消订阅。我正在找一个解释,我错在哪里了。

    例子:

    constructor(
            private _route: ActivatedRoute) {
                this._route.queryParams.subscribe(params => {
                    if (params.id) {
                        this.show(params.id);
                    }
                });
        }
    

    vs。

    constructor(
            private _route: ActivatedRoute) {
                this._route.queryParams.pipe(takeUntil(this._unsubscribeAll)).subscribe(params => {
                    if (params.id) {
                        this.show(params.id);
                    }
                });
        }
    

    我使用的是ActivatedRoute的queryParams observable,给我的印象是这里Angular会自动处理取消预订,我不必手动处理。

    1 回复  |  直到 2 年前
        1
  •  4
  •   possum    2 年前

    如果你做一本手册 subscribe 就像你的例子一样,你也应该取消订阅。这个 takeUntil 你展示的成语 _unsubscribeAll 在拆卸中完成是非常常见的。

    Angular在使用时自动取消订阅 async 管道,所以如果渲染 Observable 在你的html模板中 myObs | async 你不需要这个。

    推荐文章