const TOKEN = '123'
const ROOT = '//www.baidu.com'
const root = createAPI => (...args) => {
const result = createAPI(...args)
return {...result, url: `${ROOT}${result.url}`}
}
const auth = createAPI => (...args) => {
const result = createAPI(...args)
return {
...result,
headers: {...result.headers, authorization: `Bearer ${TOKEN}`},
}
}
const projects = team => {
return {
url: `/api/0/teams/${team}/projects/`,
}
}
root(auth(projects))('fe')
// 返回值如下
{
headers: {authorization: "Bearer 123"}
url: "//www.baidu.com/api/0/teams/fe/projects/"
}
不理解这段函数式编程,看不懂,谁能详细解释下?
### 你期待的结果是什么?实际看到的错误信息又是什么?
root
接受一个函数A
并返回一个函数B
,函数B
的函数体为:因此,函数
root
的功能是,将传递给B
的所有参数传递给A
获得结果result
,在result
的基础上增加一个url
字段。auth
的流程与root
类似。projects
的功能是根据传入参数构建一个object
,其含有一个url
字段。所以整理一下可得:
root(auth(projects))('fe')
中参数fe
被一路传递到projects
这个函数,三层函数展开后的顺序是:projects('fe') | auth | root
先构造基础数据,拼接
url
projects('fe')
>>在第一步的基础上增加
headers.authorization
字段auth
>>由
root
修正url
的前缀root
>>