在http get map中创建新对象

时间:2017-05-04 13:53:14

标签: javascript angular http typescript

我有一个订阅搜索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
      );
  }) || []);

2 个答案:

答案 0 :(得分:4)

您需要使用forEach更改map并从中返回:

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
    );
  }));