2017-05-04 58 views
0

我有一個訂閱搜索API的函數。在地圖功能中,我想將項目映射到對象。我沒有收到錯誤,但回覆總是空的。在http中創建新對象獲取地圖

這是我的代碼:

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

什麼是||。 []在那邊? – toskv

回答

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

非常感謝你 –

4

您需要更改forEachmap並從中返回:

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塊來處理錯誤。

+0

非常感謝你,但toskv是一個小快點 –

+0

@TobiasEtter哈哈,其實我是1分鐘快,但不管;) – dfsq