让我们想象一下,我们有两个接口:
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))
);
}
谢谢。
答案 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))
);
}