Angular 如何在switchMap操作符之后返回结果

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

我有嵌套http调用的服务。在第一次请求之后,我想用之前的结果进行另一次请求,并在完成后返回所有数据。我需要用result[“Expert”]传递数据,这是一个包含对象{User_key:key1}的数组。所以switchMap的第一步是使用map操作符生成JSON,然后将其传递给http请求

服务台

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