订阅已关闭时RxJS检测

时间:2018-06-18 06:51:43

标签: angular rxjs angular5 rxjs5

有没有办法检测订阅何时关闭?我有一个加载组件,当订阅存在时显示加载消息&&没有关闭,否则显示内容,但一旦关闭,我想重置引用订阅的变量,否则我不能在模板中使用mySubscription.closed作为有用的指示。

3 个答案:

答案 0 :(得分:3)

是的,基于RxJS subscribe() documentation,有3个参数可以传递,最后一个是OnCompleted回调。

var observer = Rx.Observer.create(
    function (x) {
        console.log('Next: %s', x);
    },
    function (err) {
        console.log('Error: %s', err);
    },
    function () {
        console.log('Completed');
    });

答案 1 :(得分:1)

subscribe()方法接受三个函数作为参数(参数)。订阅关闭时,将调用作为最后一个参数提供的函数。

YourObservable.subscribe(
value => console.log('This is called every time when observable emits'),
error => console.log('This is called when error occurs'), 
() => console.log('This is called when subscription closed')
);

答案 2 :(得分:1)

另外两个选择。

tap()finalize()

这两个都是您放在pipe(...)中的运算符-因此逻辑独立于subscribe(...)调用而运行,您甚至可能不在控制之内。

  在completionerror上调用

finalize()

     

tap()具有在这些条件下调用的三个参数nexterrorcomplete

最终确定可能应该保留给真正的清理类型任务。