Angular 从 BehaviorSubject 创建的 2 个 rxjs observables 不能与 forkJoin 一起工作

Angular 2 rxjs observables created from BehaviorSubject are not working with forkJoin

我正在尝试使用 Observable.forkJoin 并且订阅处理程序从未受到影响。 forkJoin 运算符在我的应用程序的其他部分为我工作,在非工作场景中我能想到的唯一区别是可观察对象是使用其 asObservable() 函数从 BehaviorSubject 对象创建的。

此订阅获得成功

    let obs = Observable.of(1);

    Observable.forkJoin(
        obs
    ).subscribe(data => {
        console.log(data);
    });

这个没有

    let bs = new BehaviorSubject<number>(1);
    let obs = bs.asObservable();

    Observable.forkJoin(
        obs
    ).subscribe(data => {
        console.log(data);
    });

当然在我的实际用例中有不止一个观察结果,这就是我首先使用 forkJoin 的原因。

是否需要对 BehaviorSubject 做一些其他事情才能使其与 forkJoin 一起工作?

更新:

在进一步研究 RxJs 文档后,我意识到 Observable.combineLatestforkJoin 更适合我的需要... Link 以防万一遇到这个问题所以 post: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-combineLatest

问题是 forkJoin 在完成时加入 observables。

在您的第一个片段中,您正在使用 of 创建一个可观察对象 - 它在 subscribe 时立即发出一个值然后完成。

在您的第二个代码段中,BehaviorSubject 未完成。如果您要调用 complete,您会看到记录到控制台的值:

let bs = new BehaviorSubject<number>(1);
let obs = bs.asObservable();

Observable.forkJoin(
    obs
).subscribe(data => {
    console.log(data);
});

bs.complete();

如果你不想使用完整的方法,你可以使用 take(1) 管道。

const subjectA = new BehaviorSubject<number>(0);
const a$ = subjectA.asObservable();

Observable.forkJoin(
    a$.pipe(take(1))
).subscribe(data => {
    console.log(data);
});