即使从不发出也获取 Observable 值

问题描述 投票:0回答:1

我希望在给定时刻获得可观察值的值,即使这个值没有任何值,未定义/错误也是可以接受的。但我的代码当前正在等待可观察值发出值(逻辑!)

我有一项服务,并且无法修改它

   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 observable
1个回答
0
投票

您必须使用另一个立即发出的流,并使用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);
  }
© www.soinside.com 2019 - 2024. All rights reserved.