Angular 7将数据添加到http请求的结果

时间:2019-03-11 11:39:47

标签: javascript angular typescript http rxjs

我得到一个ID(assetID)数组,并使用这些ID来询问数据。 对于每个http请求,我正在接收一个或多个数据集。 我想将请求ID添加到每个数据集中,然后返回数据。

获取和返回数据工作正常,但我不知道如何将资产ID添加到数据集中。

当我像下面的代码片段那样执行操作时,我只会获得每个ID的第一个数据集。 (当然...由于[0])。但是,如何遍历所有数据集?

getData(assetIds: Array<string>): Observable<any> {
  const data = assetIds.map(assetId => {
    // for each assetId
    const path = this.serverUrl + '?' + 'assetid=' + assetId;
    return this.httpClient.get(path).pipe(
      map((res: any[]) => {
        return {
          name: res[0].name,
          type: res[0].type,
          asset: assetId
        };
    }));
});

// return combined result of each assetId request
return forkJoin(data);
}

我也尝试了以下方法,但是这样做没有得到任何数据。

getData(assetIds: Array<string>): Observable<any> {
 const data = assetIds.map(assetId => {
  // for each assetId
  const path = this.serverUrl + '?' + 'assetid=' + assetId;
  return this.httpClient.get(path).pipe(
    map((res: any[]) => {
      const resultArray = [];
      res.forEach(element => {
        const row = {
          name: res[element].name,
          type: res[element].type,
          asset: assetId
        };
        resultArray.push(row);
      });
      return resultArray;
    }));
});
// return combined result of each assetId request
return forkJoin(data);

}

1 个答案:

答案 0 :(得分:0)

感谢您的答复。我尝试了一切,但我想问题是我在数组中使用了“元素”作为索引。现在,以下代码可以正常工作:

return this.httpClient.get(path)
  .pipe(
    map((datasets: AssetFilesTableItem[]) => {
      const result: AssetFilesTableItem[] = [];
      let i = 0;
      datasets.forEach(element => {
        const dataset: AssetFilesTableItem = {
          name: datasets[i].name,
          type: datasets[i].type,
          size: datasets[i].size,
          timestamp: datasets[i].timestamp,
          created: datasets[i].created,
          updated: datasets[i].updated,
          asset: assetId
        };
        result.push(dataset);
        i++;
      });

      return result;
    }));