如何检测路由订阅的完成情况?

时间:2016-08-17 19:36:00

标签: angular rxjs angular2-observables

我使用angular2:

this.route.params.subscribe(params => {
    //do stuff with params
})

我查看了RxJS docs,并说它可以添加完成回调:

this.route.params.subscribe(params => {
    // do stuff with params
}, (err) => { throw err;}, () => {
    console.log('Completed!');
});

但这种完成永远不会被解雇。 Angular2对Observables的使用是否与标准不同?

1 个答案:

答案 0 :(得分:1)

ActivatedRoute observable的工作方式没有什么特别之处。你是如何检测完成状态的。但完成可能永远不会发生。当Observable执行observer.complete()时,将调用完成回调,当发送固定数量的数据时(例如,在数组上进行迭代,或从其他某些源获取响应),就会发生这种情况。但是路由参数上的Observable是无限期的 - 用于监听组件生命周期中可能发生的参数的任何更改(因此可以使用相同的组件来提供不同的参数值,从而节省生成所需的时间)组件)。由于这些更改可能来自用户或应用程序的其他部分,因此Observable会持续组件的生命周期,并且不应发生完成的回调。这就是你应该在ngOnDesctroy()方法中取消订阅Observable的原因(防止内存泄漏导致热的Observable挂起)。