Angular 角度:串联和并联组合观测值

Angular 角度:串联和并联组合观测值,angular,typescript,rxjs,observable,angular5,Angular,Typescript,Rxjs,Observable,Angular5,我无法从JSON显示数据。我有一个主要的JSON,如下所示: "providers": [ { "id": "1", "name": "name1", "data": "http://localhost:3001/name1" }, { "id": "2", "name": "name2", "data": "http://localhost:3001/name2" } ] 需要调用数据字段中的url以获取另一个JSON文件(详细

我无法从JSON显示数据。我有一个主要的JSON,如下所示:

"providers": [
  {
    "id": "1",
    "name": "name1",
    "data": "http://localhost:3001/name1"
  },
  {
    "id": "2",
    "name": "name2",
    "data": "http://localhost:3001/name2"
  }
]
需要调用数据字段中的url以获取另一个JSON文件(详细信息),该文件包含有关特定元素的更多信息

我现在创建了一个服务,它应该加载来自详细信息的所有提交数据,并将其安全地保存在providers.data中。我现在对我得到的答复完全感到困惑。有人能澄清或解释我在这方面做错了什么吗?以下是代码片段:

export interface Provider {
  id: string;
  name: string;
  data: any;
}

export interface Providers {
  providers: Provider[];
}
//service.ts:

getListelements() {

        return this.http.get<Providers>(this.url)
          .map((res) => res)
          .map((providers) => {
            if (providers.providers.length > 0) {

              return Observable.forkJoin(
                providers.providers
                  .map((provider: Provider) => {
                  return this.http.get(provider.data)
                    .map((res) => {
                      providers.providers.data = this.mapElement(res);
                      return providers;
                  });
                })
              );
            }
            return Observable.of(providers);
          })
          .share();
      }
使用
.flatMap
.concatMap
时,我的输出返回错误

"providers": [
      {
        "id": "1",
        "name": "name1",
        "data": "http://localhost:3001/name1"
      },
      {
        "id": "2",
        "name": "name2",
        "data": "http://localhost:3001/name2"
      },
      "data": {"id":"1", "name":"name1", "furtherinfo":"lorem ipsum"}
    ]

您使用的只是
map()
,其投影函数返回一个可观察(
observatable.forkJoin
),但您希望订阅此可观察对象并获得其结果,而不是进一步传递该可观察对象

因此,您应该使用
concatMap()
mergeMap()
switchMap
在这种情况下也适用),而不是
map()


正确的!但现在我的输出没有正确映射:“提供者”:[{“id”:“1”,“name”:“name1”,“data”:“},{“id”:“2”,“name”:“name2”,“data”:“}”,data:{id:'id1',name1',imgurl:'abc.png'}]相反,我想覆盖数据字段我不知道您的数据是什么样子,但我认为这部分是
.map((res)=>{providers.providers.data=this.mapement(res);return providers;})
提供程序中更新某些内容,然后返回它是可疑的,因为这是为每个
this.http.get
响应调用的,它看起来像是在重复重写自身。好的,我明白了。。。那么,有没有最好的案例来解决几个JSON的数据处理问题呢?创建一个单独的mapper对象好吗?请看我的更新,我认为应该这样做,但因为我自己无法测试它,所以我只是猜测而已。
"providers": [
      {
        "id": "1",
        "name": "name1",
        "data": "http://localhost:3001/name1"
      },
      {
        "id": "2",
        "name": "name2",
        "data": "http://localhost:3001/name2"
      },
      "data": {"id":"1", "name":"name1", "furtherinfo":"lorem ipsum"}
    ]
return this.http.get<Providers>(this.url)
  .map((res) => res)
  .concatMap((providers) => {
    return Observable.forkJoin(...) ;
  });
const observables = providers.providers
  .map((provider: Provider) => this.http.get(provider.data)
    .map(response => {
      provider.data = this.mapElement(response);
      return provider;
    })
  );

return Observable.forkJoin(observables)