Angular 如何在switchMap操作符之后返回结果
我有嵌套http调用的服务。在第一次请求之后,我想用之前的结果进行另一次请求,并在完成后返回所有数据。我需要用result[“Expert”]传递数据,这是一个包含对象{User_key:key1}的数组。所以switchMap的第一步是使用map操作符生成JSON,然后将其传递给http请求 服务台Angular 如何在switchMap操作符之后返回结果,angular,rxjs,Angular,Rxjs,我有嵌套http调用的服务。在第一次请求之后,我想用之前的结果进行另一次请求,并在完成后返回所有数据。我需要用result[“Expert”]传递数据,这是一个包含对象{User_key:key1}的数组。所以switchMap的第一步是使用map操作符生成JSON,然后将其传递给http请求 服务台 getAreaByKey(key: string): Observable<Area> { return this.http.get<any[]>(`${this.AP
getAreaByKey(key: string): Observable<Area> {
return this.http.get<any[]>(`${this.API_URL}/v0/areas/${key}`).pipe(
map(result => {
return {
key: result["Key"],
name: result["Description"],
experts: result["Experts"]
};
}),
switchMap(res => {
res.experts.map(el => {
let json_data = JSON.stringify(el["User_Key"]);
this.expertService.getExpertsByKeys(json_data);
});
})
}
getAreaByKey(key:string):可观察{
返回此.http.get(`${this.API_URL}/v0/areas/${key}`).pipe(
映射(结果=>{
返回{
键:结果[“键”],
名称:结果[“说明”],
专家:结果[“专家”]
};
}),
开关映射(res=>{
res.experts.map(el=>{
让json_data=json.stringify(el[“User_Key]”);
this.expertService.getExpertsByKeys(json_数据);
});
})
}
问题是我试图在switchMap之后返回数据,但它显示错误。而且我在开发工具中看不到第二个请求。我猜您正在寻找类似于
CombineTest
?您有多个输入观察值,但对所有这些结果都感兴趣(即您案例中的专家阵列)
试着这样做:
switchMap(res => {
return combineLatest(res.experts.map(el => {
let json_data = JSON.stringify(el["User_Key"]);
return this.expertService.getExpertsByKeys(json_data);
}));
})
SwithMap需要得到一个可观测值作为回报。您可以使用forkJoin组合结果的所有元素,并生成另一个switchMap可以在内部订阅的可观测值
getAreaByKey(key: string): Observable < Area > {
return this.http.get < any[] > (`${this.API_URL}/v0/areas/${key}`)
.pipe(
map(result => {
return {
key: result["Key"],
name: result["Description"],
experts: result["Experts"]
};
}),
switchMap(res => forkJoin([
...res.experts.map(el => this.expertService.getExpertsByKeys(JSON.stringify(el["User_Key"])))])
)
);
}
getAreaByKey(键:字符串):可观察{
返回this.http.get(`${this.API_URL}/v0/areas/${key}`)
.烟斗(
映射(结果=>{
返回{
键:结果[“键”],
名称:结果[“说明”],
专家:结果[“专家”]
};
}),
开关映射(res=>forkJoin([
…res.experts.map(el=>this.expertService.getExpertsByKeys(JSON.stringify(el[“用户密钥])))))
)
);
}
首先,您必须将一个可观察的对象返回到switchMap
,因此投影函数必须具有return
。然后我不完全确定您要做什么。看起来您根本不需要使用switchMap
。