我有一个工作函数,它将服务调用的输出映射到一个对象,然后将它们映射到一个数组。
API的响应类似于:
[
{
"paper_id": "0015023cc",
"metadata": { }
"abstract": []
...
}
{
"paper_id": "0015023cc",
"metadata": { }
"abstract": []
...
}
]
papersList(): Observable<Paper[]> {
const url = `${this.allPapersUrl}/`;
return this.http
.get(url)
.pipe(
map((data: any[]) =>
data.map(
(item: any) =>
new Paper(item.paperId, item.metadata, item.paperAbstract)
)
)
);
}
如何为返回相同对象而不是数组的其他服务编写函数?
新服务的API输出将是:
{
"paper_id": "0015023cc",
"metadata": { }
"abstract": []
...
}
我正在尝试完成的代码。
fetchPaper(pvalue: string): Observable<Paper> {
const url = `${this.paperDetailUrl}`;
params.append('paperid', pvalue);
const url = `${this.paperDetailUrl}`;
return this.http
.get(url, {params: params})
.pipe( ???
相同的运算符map()
return this.http
.get(url, { params })
.pipe(
map(({ paperId, metadata, paperAbstract }) => new Paper(paperId, metadata, paperAbstract)),
);
然后您无需循环。另请注意,您在响应中得到abstract
,而不是paperAbstract
return this.http
.get(url, {params: params})
.map(data:any => new Paper(data.paperId, data.metadata, data.abstract) )