Angular: 使用 forkJoin 时主题行为不同

Angular: Subject behaviour different when using forkJoin

伙计们,谁能解释一下这种行为?

这是有效的:

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

但这不起作用:

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

稍作改动后它开始工作:

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

current$属性是这样定义的:

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

然后有一个 init() 方法,我 GET 通过 http 发送数据并发送到 this.subject$;

非常感谢正确的方向!

forkJoin 仅在其所有源 Observable 至少发出一次且全部完成后才发出。因此,当您使用 Subject 作为 forkJoin() 的源 Observable 时,然后通过添加 take(1) 强制它完成,因此 forkJoin 也会发出然后完成。