箭头函数返回空对象然后返回函数?

时间:2018-07-27 17:47:20

标签: javascript javascript-objects arrow-functions

我已经在其他地方搜索了正在发生的事情,但是找不到类似的示例。

export const validateToken = (token) => () =>
  api.user.validateToken(token);

这句话是不是导出一个函数,该函数接受一个应该是令牌的对象,然后什么也不返回?然后调用validateToken函数,但传入初始令牌对象?

这和:和有什么区别

export const validateToken = (token) =>
  api.user.validateToken(token);

为什么,如果我删除多余的()和=>,我会收到错误消息:

Error: Actions must be plain objects. Use custom middleware for async actions.


12 | 
  13 | componentDidMount() {
  14 |   // pass token from route
> 15 |   this.props.validateToken(this.props.match.params.token);
  16 | }
  17 | 
  18 | render() {

我显然在这里错过了一些重要的事情。 任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:1)

该函数实际上正在返回另一个函数。如果您不使用箭头语法编写它,则它看起来可能会更清晰一些:

function validateToken(token){
    return function(){
        return api.user.validateToken(token);
    };
}

这在函数式编程中很常见。它与currying之类的概念有关,在概念中,您将部分参数应用于函数以创建新函数。

示例用法如下:

let validate1=validateToken('abc');
validate1(); //=>output from api.user.validateToken('abc')