Rxjs将Observable <any> []转换为Observable <any []>

时间:2018-08-23 08:10:48

标签: angular typescript rxjs pipe combinelatest

让我们想象一下,我们有两个接口:

export interface IA{
   something: string;
   myprop: number;
}

export interface IB{
   myprop: number;
}

我有一个方法,该方法应调用从后端返回IA对象的端点,然后应调用另一个端点,然后将两个结果组合到IA对象中。以前我在做这样的事情:

GetA():Observable<IA>{
    return this.httpClient
        .get<IA>('somewhere')
        .concatMap(a=>Observable.combineLatest(
           Observable.of(a), 
           GetB(a)
        ))
        .map([a,b]=>combineSomehowAandB(a,b))
}

但是现在,在新版本的rxjs中,我不得不改用.pipe(operators [])。如何用pipe()实现相同的功能?我尝试过这样,但是不起作用:

GetA():Observable<IA>{
    return this.httpClient
        .get<IA>('somewhere')
        .pipe(
           concatMap(a=>[Observable.of(a), GetB(a)]),
           combineLatest(),
           map([a,b]=>combineSomehowAandB(a,b))
         );
}

谢谢。

2 个答案:

答案 0 :(得分:1)

看起来您只是没有将原始链正确地重写为RxJS 6:

return this.httpClient.get<IA>('somewhere')
  .pipe(
    concatMap(a => combineLatest(of(a), GetB())),
    map(([a,b]) => combineSomehowAandB(a,b)),
  );

单独使用combineLatest()而没有任何参数是没有用的。

答案 1 :(得分:0)

使用of代替observable.of

GetA():Observable<IA>{
    return this.httpClient
        .get<IA>('somewhere')
        .pipe(
           concatMap(a=> combineLatest(
              of(a), 
              GetB()
           )),
           map([a,b]=>combineSomehowAandB(a,b))
         );
}