从BehaviorSubject创建的Angular 2 rxjs observable不能与forkJoin一起使用

cbo*_*ton 17 rxjs behaviorsubject angular

我正在尝试使用Observable.forkJoin,订阅处理程序永远不会被击中.forkJoin操作符在我的应用程序的其他部分为我工作,我在非工作场景中可以想到的唯一区别是observable是BehaviorSubject使用其asObservable()功能从对象创建的.

这个订阅受到了打击

    let obs = Observable.of(1);

    Observable.forkJoin(
        obs
    ).subscribe(data => {
        console.log(data);
    });
Run Code Online (Sandbox Code Playgroud)

这个没有

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

    Observable.forkJoin(
        obs
    ).subscribe(data => {
        console.log(data);
    });
Run Code Online (Sandbox Code Playgroud)

当然,在我的实际用例中,有一个以上的obseravble,这就是为什么我首先使用forkJoin.

是否还需要对BehaviorSubject执行其他操作以使其与forkJoin一起使用?

更新:

在调查了RxJs文档后,我意识到这Observable.combineLatest更适合我的需要而不是forkJoin...链接在这里以防任何遇到这个SO帖子:http: //reactivex.io/rxjs/class/es6/Observable. JS〜Observable.html#静态方法,combineLatest

car*_*ant 16

问题是,forkJoin当观察者完成时加入观察者.

在您的第一个片段中,您正在使用of- 创建一个observable subscribe,然后立即发出一个值,然后完成.

在您的第二个片段中,BehaviorSubject未完成.如果您要打电话complete,您会看到记录到控制台的值:

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

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

bs.complete();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的回复.在调查了RxJs文档后,我意识到`Observable.combineLatest`比`forkJoin`更适合我的需要...链接在这里以防任何遇到这个SO帖子:http://reactivex.io/ rxjs /类/ ES6/Observable.js〜Observable.html#静态方法-combineLatest (8认同)