2016-09-27 35 views
0

我爲我所有的api調用創建了一個通用構建請求方法。迴應沒有問題,但沒有通過此方法。通用構建請求方法響應undefined

我api.ts類(片斷)

buildRequest(url, method, body?) { 
    let options = new RequestOptions({ 
     url: this.apiUrl + url, 
     method: method, 
     body: body 
    }); 
    let req = new Request(options); 
    return this.http.request(req) 
     .map(res => { 
      res.json(); 
     }) 
     .catch(this.handleError); 
} 

handleError(error: any) { 
    return Observable.throw(error.message); 
} 

在我定義所有的呼叫,像這樣同一類:

getItem() { 
    return this.buildRequest('url', RequestMethod.Get) 
} 
從組件

然後我做

this.api.getItem().subscribe(res => { 
    this.item = res; 
    } 
}) 

其他地方,但在.map中,res是undefined。當我用普通

回報this.http.get(...)

,在這裏顯示的相同的邏輯,它工作得很好。我究竟做錯了什麼?從 'rxjs /可觀察'

進口{}可觀察到;:

我導入這兩個

進口 'rxjs /接收'

回答

1

在你buildRequest方法你犯了一個小錯誤。當使用大括號lambda表達式,你必須返回的東西:

x => x.Field // <-- this is a shorthand 

等於

x => { return x.Field; } 

所以你在.map調用代碼應該是這樣的:

return this.http.request(req) 
    .map(res => { 
     return res.json(); 
    }) 
    .catch(this.handleError);