【问题标题】:How do I detect the completion of a route subscription?如何检测路由订阅的完成?
【发布时间】:2016-08-17 19:35:59
【问题描述】:

我正在使用 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 的使用与规范不同吗?

【问题讨论】:

    标签: angular rxjs angular2-observables


    【解决方案1】:

    ActivatedRoute 可观察对象的工作方式没有什么特别之处。您在如何检测完成状态方面是正确的。但完成可能永远不会发生。当 Observable 执行observer.complete() 时将调用完成回调,这发生在有固定数量的数据要发送时(比如遍历数组,或从其他来源获得响应)。但是路由参数上的 Observable 是不确定的 - 旨在侦听组件生命周期内可能发生的参数更改(因此可以使用相同的组件来提供不同的参数值,从而节省生成时间组件)。由于这些更改可能来自用户或应用程序的其他部分,因此 Observable 会持续组件的生命周期,并且不应发生完成的回调。这就是为什么你应该在你的 ngOnDesctroy() 方法中取消订阅 Observable(防止内存泄漏导致热的 Observable 挂起)。

    【讨论】:

    • 这应该是评论而不是答案。
    • @doatraman 我同意,但在我的代表上升之前我不能评论其他人的帖子。
    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2021-04-13
    相关资源
    最近更新 更多