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