我正在查看一些代码,发现了这个:
this.busy = this.service.getInfo().subscribe((info: InfoData[]) => {
this.setInfo(info);
});
现在busy
是boolean
类型的组件属性,用作[ngBusy]
指令的输入值。显然,subscribe()
会返回Subscription
,它不为空,因此会转换为true
。这触发了指令以显示模态加载弹出窗口,一旦信息被解析就会消失。这意味着,那个时刻this.busy
是假的,我必须表示Subscription
对象不再存在。
在getInfo()
方法内部,只有一行,return Observable.of(info)
,其中info是存根变量。
所以我的问题是:
数据解析后是否会自动删除Subscription
?如果是,是仅适用于Observable.of()
还是有其他此类行为的例子?
答案 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>