Typescript 等待RXJS中的某个值为真

Typescript 等待RXJS中的某个值为真,typescript,rxjs,Typescript,Rxjs,我将angular和rxjs与外部服务一起使用: 我有以下方法(简化) getElevation(位置:铯制图):可观测{ 如果(!this.ready){ 回击投手(“未准备好”); } 返回新的可观察对象((观察者)=>{ const promise=GetPromise(); 我保证,那么( (值)=>{ 下一步(值); observer.complete(); }, () => { 投掷者(“承诺错误”); } ); }); }); } 我想把它做成一个ReplaySubject,在做

我将angular和rxjs与外部服务一起使用:

我有以下方法(简化)

getElevation(位置:铯制图):可观测{
如果(!this.ready){
回击投手(“未准备好”);
}
返回新的可观察对象((观察者)=>{
const promise=GetPromise();
我保证,那么(
(值)=>{
下一步(值);
observer.complete();
},
() => {
投掷者(“承诺错误”);
}
);
});
});
}
我想把它做成一个ReplaySubject,在做承诺之前等待它成为真的,或者直接做操作

所以我做了这样的事情(再次简化以显示逻辑):

private ready$=新的ReplaySubject(1);
构造函数(私有ngZone:ngZone,私有myService:MuService){
this.myService.iselementrady$.subscribe((isReady)=>{
此.ready$.next(isReady);
});
}
但是我不知道如何将ready$与我的方法合并。就像我在做的一样

  getElevation(pos: Cesium.Cartographic): Observable<number> {
    return this.ready$.pipe(
      switchMap((value) => {
        if(value) {
          return from(GetPromise())
          ).pipe(
            switchMap((value) => of(updatedPositions[0].height))
          );
        } else {
          // wait for ready 
        }
      })
    );
getElevation(位置:铯制图):可观测{
返回此.ready$.pipe(
开关映射((值)=>{
如果(值){
从(GetPromise())返回
).烟斗(
switchMap((值)=>of(更新的位置[0]。高度))
);
}否则{
//等待准备就绪
}
})
);
在服务中重置某些值时,READY可能会变为false,因此必须始终选中此项

您可以先使用它

getElevation(位置:铯制图):可观测{
返回此.ready$.pipe(
第一个(v=>v),//这将只取第一个“true”值
开关映射((值)=>{
从(GetPromise())返回
.烟斗(
switchMap((值)=>of(更新的位置[0]。高度))
);
})
);
您可以先使用

getElevation(位置:铯制图):可观测{
返回此.ready$.pipe(
第一个(v=>v),//这将只取第一个“true”值
开关映射((值)=>{
从(GetPromise())返回
.烟斗(
switchMap((值)=>of(更新的位置[0]。高度))
);
})
);
  private ready$ = new ReplaySubject<any>(1);


  constructor(private ngZone: NgZone, private myService: MuService) {
    this.myService.isElementReady$.subscribe((isReady) => {
        this.ready$.next(isReady);
    });
  }
  getElevation(pos: Cesium.Cartographic): Observable<number> {
    return this.ready$.pipe(
      switchMap((value) => {
        if(value) {
          return from(GetPromise())
          ).pipe(
            switchMap((value) => of(updatedPositions[0].height))
          );
        } else {
          // wait for ready 
        }
      })
    );