2016-05-14 85 views
3

我剛開始習慣於ES6語法,我想知道是否可以使用箭頭函數賦值給一個變量。我正在寫一個基本的輕量級AJAX輔助庫和200狀態,我想一個有效載荷返回給用戶,這是我目前做:ES6用箭頭函數分配一個變量

var responseData = ""; 
switch (payload.returnType.toLowerCase()) { 
    case "json" : responseData = JSON.parse(httpRequest.responseText); break; 
    case "text" : responseData = httpRequest.responseText; break; 
    default : responseData = null; break; 
} 
callback(null, responseData); 

這是好的,但我不能幫但想到我能做出這樣更乾淨,如果我這樣做:

callback(null,() => { switch(payload.returnType.toLowerCase()) { ... }); 

我期望return聲明作爲我的回調的第二個參數發送表達式的結果,但是當我的控制檯它打印的主叫用戶登錄switch語句。

或者我試圖做:

var responseData =() => { 
    switch (payload.returnType.toLowerCase()) { 
     case "json" : return JSON.parse(httpRequest.responseText); break; 
     case "text" : return httpRequest.responseText; break; 
     default : return null; break; 
    } 
} 
callback(null, responseData); 

在這種情況下,responseData總是空的。是否可以將返回值作爲我的第二個參數,或者將它作爲箭頭函數的結果綁定到responseData

+1

您創建一個函數,但不執行該函數。 – Laurence

+0

你也必須實際返回一些東西 - 如果你不使用{},你不需要返回,但是因爲你的函數有()=> {}你需要返回你想要的值。 –

+0

@NetaMeta對不起,我複製並粘貼了我的答案中的第一個塊,我知道我需要返回fromt他的功能來分配:) – Alex

回答

6

您創建了一個匿名函數,但不執行它。

例如:

var getResponseData =() => { 
    switch (payload.returnType.toLowerCase()) { 
     case "json" : return JSON.parse(httpRequest.responseText); 
     case "text" : return httpRequest.responseText; 
     default : return null; 
    } 
}; 
callback(null, getResponseData()); 
+0

好的修正。 –

+2

謝謝你,這工作得很好,然後如果我想在回調參數內執行它,我會把它作爲一個閉包('(=){...})();'對嗎? – Alex

+1

是的,你只會喜歡別的。 –

0

我想你的預感是對的,但你是在錯誤的軌道上,恕我直言。我想你想要做的就是創建地圖的響應類型的回調的:

let parsers = new Map([ 
    ["json", JSON.parse], 
    ["text", (text) => text], 
    ["_",() => null] 
]), t = payload.returnType.toLowerCase(); 

if (!parsers.has(t)) { 
    t = "_"; 
} 
callback(null, parsers.get(t)(httpRequest.responseText)) 

是什麼讓這個主觀的「清潔」是你和實現分離的邏輯。您可以在不影響代碼的情況下將解析器定義移到任何地方。這就是爲什麼開關語句感覺「不起作用」(或不確定)。

但當然,這一切仍然是一個品味:)

+0

非常有趣的傑拉德,我沒有想過這個實現之前......我喜歡它! – Alex

+0

如果我使用這個,我得到'迭代器值json不是一個入口對象', – Alex

+0

我把它輸入了我的頭頂,讓我檢查一下編碼錯誤。 (編輯):哦,等等,我已經看到第一個錯誤,對也應該包含在數組中。 –

相關問題