ES6使用箭头功能分配变量

时间:2016-05-14 14:53:47

标签: javascript ecmascript-6

我刚开始习惯使用ES6语法,我想知道是否可以使用箭头功能分配给变量。我正在编写一个基本的轻量级AJAX帮助程序库,状态为200,我想将一个有效负载返回给用户,我目前正在这样做:

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

3 个答案:

答案 0 :(得分:8)

您创建一个匿名函数但不执行它。

例如:

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

答案 1 :(得分:5)

使用自执行功能,甚至更短:

let res = (() => {
    return something;
})();

或使用您的代码:

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

您可以清楚地看到此片段中的区别:

let res1 = () => {
  return "something";
};

let res2 = (() => {
  return "something";
})();

console.log(res1);
console.log(res2);

答案 2 :(得分:0)

我认为你的预感是对的,但是你在错误的轨道上,imho。我认为你想要做的是为回调创建一个响应类型的地图:

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))

是什么让这主观和更清洁"是你将逻辑与实现分开。您可以将解析器定义移动到任何位置而不会影响代码。这就是为什么转换语句感觉不起作用的原因" (或不明确的)。

但当然,这一切都是品味问题:)