Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
319 views
in Technique[技术] by (71.8m points)

typescript - Angular: Subject behaviour different when using forkJoin

Folks, can anyone explain this behaviour?

This is working:

this.sessionService.current$.subscribe(session => { console.log('WORKING', session); });

But this is NOT working:

forkJoin([
      this.sessionService.current$
    ])
      .subscribe(([
        session
      ]) => {
        console.log('NOT WORKING', session);
...
    

After a little change got it working:

forkJoin([
      this.sessionService.current$.pipe(take(1))
    ])
      .subscribe(([
        session
      ]) => {
        console.log('WORKING', session);
...
    

current$ property in SessionService is defined like this:

private readonly subject$: Subject<Session> = new BehaviorSubject<Session>(null);
public readonly current$: Observable<Session> = this.subject$.asObservable();

there is then a init() method where I GET data over http and emit to this.subject$;

Thanks a lot for a right direction!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

forkJoin emits only after all its source Observables emit at least once and all complete. So when you're using Subject as a source Observable for forkJoin() then by adding take(1) you force it to complete and therefore forkJoin emits as well and then completes.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.7k users

...