RxJS 检测订阅何时关闭

RxJS Detect When Subscription has Closed

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

是的,根据 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');
    });

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

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')
);

其他几个选项。

tap() and finalize()

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

finalize() is called on completion OR error

tap() has three parameters next, error, and complete that are called on those conditions

Finalize 应该保留用于真正的清理类型任务。