2016-08-02 56 views
5

我在我的代碼中遇到了一個小問題,這讓我感到困惑,希望有人能解釋它爲什麼會執行它所做的事情。ES6帶括號的箭頭功能

代碼1

sendText(){ 
    return this.http.get('/api') 
     .map((response:Response) => response.json()); 
} 

代碼2

sendText(){ 
    return this.http.get('/api').map((response:Response) => { 
     response.json(); 
    }); 
} 

這兩個碼之間的關鍵區別在於,在代碼2我放置在括號中的箭頭功能之後添加我的任務在這些括號內,並在代碼1我拿出括號和將任務放在一行上。

我的問題是,爲什麼我的對象從服務器端回來爲未定義代碼2進來與angular2而代碼1返回我懷疑對象提供的訂閱方法。

+4

隨着你必須使用括號'return'就像一個典型的功能。 – georg

+2

沒有括號:表達式。括號:代碼塊。 –

回答

10
(response:Response) => response.json() 

這是該速記

(response:Response) => { return response.json(); } 

{}讓你添加塊內多個語句。沒有它們,函數只運行一條語句並返回其值。

文檔:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

+0

不客氣。另外,你能爲我清理一些東西嗎?爲什麼你有'response:response'而不是'response'?這就像是一個類型提示或什麼? –

+0

從教程告訴我的呃。這是一種打字稿語法,可以確保它是Response類型。因此避免了將來的錯誤。不要把我的話理所當然,儘管我仍然在學習。這是不必要的? –

+0

在打字稿中可能有必要,我不知道,我從來沒有用過它。在JavaScript中,這是一個語法錯誤。 –