RxJS管道Finalize运算符未得到调用

时间:2019-10-03 11:05:52

标签: rxjs angular6 angular7

import {
    Observable,
    BehaviorSubject
} from 'rxjs';
import {
    finalize,
    share
} from 'rxjs/operators'

export class someComponent() {

    public count$ = new BehaviorSubject < any > (0);

    public constructor() {
        this.shareResponse()
            .pipe(
                finalize(() => {
                    console.log('finalize called');
                }))
            .subscribe((event: any) => {
                // Do something
            });
    }
    public shareResponse(): Observable < any > {
        return this.count$.pipe(share());
    }
    public countChanged(event) {
        this.count$.next(event);
    }
}

HTML:

    <some-tag(countChanged) = (countChanged($event)) > < /some-tag>

2 个答案:

答案 0 :(得分:3)

BehaviorSubject不会完成,除非您自己通过调用来完成 this.count$.complete()。这就是为什么finalize()不会发生的原因,因为它正在等待Observable完成。

看看StackBlitz上的代码示例,请参见link

答案 1 :(得分:0)

不确定您想用上面的代码做什么,但是您可以在 take(1) 内的 finalize() 运算符之前使用 pipe() 以强制它在第一次发出后完成价值。