我有一个订阅搜索API的功能。在map函数中,我想将项目映射到对象。我没有收到错误,但响应总是空的。
这是我的代码:
return this.http.get(searchURL)
.map((res: Response) => res.json())
.map(json => json.items.forEach(item => {
new SearchResult(
item.id,
item.title,
item.price
);
}) || []);
答案 0 :(得分:4)
return this.http.get(searchURL)
.map((res: Response) => res.json())
.map(json => json.items.map(item => {
return new SearchResult(
item.id,
item.title,
item.price
);
}))
.catch((err: Response) => {
// handle error
})
forEach
不会返回任何内容,而map
会生成包含您从回调中返回的项目的新数组。
另外,请注意|| []
检查无用。如果json.items
是一个数组,那么map将始终生成另一个数组。如果它不是一个数组,那么它将抛出错误,你需要在.catch
(我的意思是可感知的地图)之后附加.map
块来处理。
答案 1 :(得分:2)
您需要在返回的列表上映射并对其进行转换,而不是 forEach 。
此外,如果项目列表为空地图将返回空列表,则无需执行|| []了。
return this.http.get(searchURL)
.map((res: Response) => res.json())
.map(json => json.items.map(item => {
return new SearchResult(
item.id,
item.title,
item.price
);
}));