从BehaviorSubject创建的Angular 2 rxjs观测值不适用于forkJoin

从BehaviorSubject创建的Angular 2 rxjs观测值不适用于forkJoin,angular,rxjs,behaviorsubject,Angular,Rxjs,Behaviorsubject,我正在尝试使用Observable.forkJoin,订阅处理程序永远不会被击中。forkJoin操作符在我的应用程序的其他部分中为我工作,在非工作场景中我能想到的唯一区别是,使用其asObservable()函数从BehaviorSubject对象创建可观察对象 这个订阅被点击了 let obs = Observable.of(1); Observable.forkJoin( obs ).subscribe(data => { c

我正在尝试使用
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);
    });
设bs=newbehaviorsubject(1);
设obs=bs.asObservable();
可观察的分叉连接(
obs
).订阅(数据=>{
控制台日志(数据);
});
当然,在我的实际用例中有不止一个obseravble,这就是为什么我首先使用forkJoin

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

更新:

在进一步研究RxJs文档之后,我意识到
Observable.combinelateTest
forkJoin
更适合我的需要。。。如果任何人遇到此SO帖子,请链接此处:

问题在于
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();
设bs=newbehaviorsubject(1);
设obs=bs.asObservable();
可观察的分叉连接(
obs
).订阅(数据=>{
控制台日志(数据);
});
b.完成();
如果不想使用完整方法,可以使用take(1)管道

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

Observable.forkJoin(
    a$.pipe(take(1))
).subscribe(data => {
    console.log(data);
});
const subjectA=新行为主体(0);
常量a$=subjectA.asObservable();
可观察的分叉连接(
美元管道(取(1))
).订阅(数据=>{
控制台日志(数据);
});

感谢您的回复。在进一步研究RxJs文档之后,我意识到
Observable.combinelateTest
forkJoin
更适合我的需要。。。如果任何人遇到此SO帖子,请链接此处: