2016-05-14 86 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

我把它输入了我的头顶,让我检查一下编码错误。 (编辑):哦,等等,我已经看到第一个错误,对也应该包含在数组中。 –

相关问题