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
也会发出然后完成。
伙计们,谁能解释一下这种行为?
这是有效的:
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
也会发出然后完成。