首页 文章

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

提问于
浏览
12

我正在尝试使用 Observable.forkJoin 并且订阅处理程序永远不会被命中 . forkJoin运算符在我的app的其他部分为我工作,我在非工作场景中可以想到的唯一区别是observable是使用 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);
    });

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

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

更新:

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

1 回答

  • 10

    问题是 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();
    

相关问题