从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帖子,请链接此处: