Rxjs 将 Observable<any>[] 转换为 Observable<any[]>
Rxjs Convert Observable<any>[] to Observable<any[]>
假设我们有两个接口:
export interface IA{
something: string;
myprop: number;
}
export interface IB{
myprop: number;
}
我有一个方法应该从后端调用 returns 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))
);
}
提前致谢。
看来您只是没有正确地将原始链重写为 RxJS 6:
return this.httpClient.get<IA>('somewhere')
.pipe(
concatMap(a => combineLatest(of(a), GetB())),
map(([a,b]) => combineSomehowAandB(a,b)),
);
不带任何参数单独使用combineLatest()
是没有用的。
使用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))
);
}
假设我们有两个接口:
export interface IA{
something: string;
myprop: number;
}
export interface IB{
myprop: number;
}
我有一个方法应该从后端调用 returns 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))
);
}
提前致谢。
看来您只是没有正确地将原始链重写为 RxJS 6:
return this.httpClient.get<IA>('somewhere')
.pipe(
concatMap(a => combineLatest(of(a), GetB())),
map(([a,b]) => combineSomehowAandB(a,b)),
);
不带任何参数单独使用combineLatest()
是没有用的。
使用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))
);
}