给定两个来源,其中之一可能未定义,我如何组合两者中最新的?
const observable1 = interval(100);
const observable2 = this.ref?.observable; // this is a reference to an angular viewchild that will not exist until some unknown point in the future
combineLatest([observable1, observable2]).subscribe(...)
一旦定义了 this.ref,我就需要订阅 this.ref.observable 的输出 observable(但我不知道什么时候会)。
我尝试过...
observable1.pipe(
startWith(of(true)),
switchMap((_) => interval(10)),
skipWhile((_) => !this.ref),
switchMap((_) => observable1),
combineLatestWith(this.ref?.observable ?? EMPTY),
)
.subscribe((val1, val2]) => {...})
但是a)我无法弄清楚我在从combineLatestWith返回的类型周围遇到了什么TS错误,b)这对于看似简单的问题来说似乎过于复杂!
如果在我想开始观察时源可观察对象所在的对象可能未定义,是否有更简单的方法从可观察源获取排放?
创建一个最初具有
null
的BehaviorSubject
subject: BehaviorSubject<any> = new BehaviorSubject<any>(null);
然后在
ngOnInit
或 constructor
订阅更改!
ngOnInit() {
this.subject.pipe(
startWith(of(true)),
switchMap((_) => interval(10)),
skipWhile((_) => !this.ref),
switchMap((_) => observable1),
combineLatestWith(this.ref?.observable ?? EMPTY),
)
.subscribe((val1, val2]) => {...})
}
视图子项通常在
ngAfterViewInit
上可见。
ngAfterViewInit() {
if (this.viewChild?.nativeElement) {
this.subject.next(this.viewChild.nativeElement);
}
}