我希望在给定时刻获得可观察值的值,即使这个值没有任何值,未定义/错误也是可以接受的。但我的代码当前正在等待可观察值发出值(逻辑!)
我有一项服务,并且无法修改它:
export class MyService {
private readonly isEnable$ = new ReplaySubject<boolean>(1)
public init(isEnable: boolean) {
this.isEnable$.next(isEnable);
}
public getFoo() {
return this.isEnable$.pipe(
map((isEnable: booelan) => isEnable ? foo : bar)
)
}
}
在我的代码中,我使用此服务来检索信息。我遇到了无法初始化 isEnable$ 的情况。
所以当我这样做时,什么也没有发生,这是正常的。
this.myservice.getFoo().pipe(
tap((value) => console.log(value))
).subscribe();
我希望有错误或未定义或空字符串,而不等待 isEnable$ 发出。
所以我的解决方法是:
race(
this.myservice.getFoo(),
of('').pipe(delay(1)),
).pipe(
tap((value) => console.log(value)) //got '' when not initialized, and got corrrect value when it is.
).subscribe()
首先,有人可以解释一下为什么我的第一个可观察的完成速度超过 1 毫秒吗?这永远都是真的吗? 有没有更好的方法来实现这一目标?
谢谢!
您必须使用另一个立即发出的流,并使用RxJs组合运算符。您可以使用 concat (它也会保留顺序)。
ngOnInit(): void {
concat(
of(null),
this.myservice.getFoo().pipe(tap((value) => console.log(value)))
).subscribe((data) => {
console.log(data);
});
setTimeout(() => {
this.myservice.init(true);
}, 3000);
}