订阅价值后,订阅会自动清理吗?

时间:2017-04-18 16:46:21

标签: angular typescript rxjs observable

我正在查看一些代码,发现了这个:

this.busy = this.service.getInfo().subscribe((info: InfoData[]) => {
            this.setInfo(info);
        });

现在busyboolean类型的组件属性,用作[ngBusy]指令的输入值。显然,subscribe()会返回Subscription,它不为空,因此会转换为true。这触发了指令以显示模态加载弹出窗口,一旦信息被解析就会消失。这意味着,那个时刻this.busy是假的,我必须表示Subscription对象不再存在。

getInfo()方法内部,只有一行,return Observable.of(info),其中info是存根变量。

所以我的问题是: 数据解析后是否会自动删除Subscription?如果是,是仅适用于Observable.of()还是有其他此类行为的例子?

1 个答案:

答案 0 :(得分:4)

  

数据解析后是否会自动删除订阅?

不,它不是。 - 订阅对象仍然存在,这是因为在JavaScript中对象无法“自行删除”。您还可以检查下面的代码,看看是否还有订阅对象。它不再附加到流上,但它仍然存在。

我假设您正在使用angular2-busy - 如果是这种情况,那么您应该仔细查看文档 - [ngBusy]能够评估订阅对象并且将会该订阅对象关闭时停止显示忙碌指示

在下面的代码示例中,您可以看到在订阅结束时它仍然存在,但在非操作/关闭状态下,angular2-busy能够检测到这一点。

const of$ = Rx.Observable.of("Test");

let sub = of$.subscribe();

// the subscription will be automatically closed, but not be "undefined" or "falsly"
console.log(sub);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>