我得到一个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);
}
答案 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;
}));