我正在尝试使用Ramda编写2个函数,但我遇到pipe
的问题,这意味着我不知道如何使用它。
让我们假设我有一个返回数组的函数:
var createQuery = params => [ getSQLQuery( params ), [ getMarket() ] ];
var getSQLQuery = ( { lang } ) => `My query is ${lang}`;
var getMarket = () => "en_en"
因此,在调用createQuery({ lang: "es" })
时,我会得到以下输出:[ "My query is es", ["en_en"] ]
;
现在,让我们假设我是一个讨厌的男孩,我想点击这个重要的信息!
R.tap(console.log, createQuery({lang: "es"}))
组合物(井,管道,确切地说)将是:
R.pipe(
createQuery( {lang: "en"} ),
R.tap(console.log)
);
返回一个函数。
现在让我们说我想执行所说的功能:
var comp = params => R.pipe(
createQuery( params ),
R.tap(console.log)
)(params);
comp({lang: "uk"}); //Blows Up!?
为什么我的功能会被f.apply is not a function
炸毁?
我做错了什么?
答案 0 :(得分:3)
您遇到的问题是因为您正在调用createQuery(params)
,然后尝试将结果视为一种功能。
您的示例功能comp
可以像这样更新:
const comp = params => R.pipe(createQuery, R.tap(console.log))(params)
和R.pipe
会将params
和参数传递给createQuery
,然后将结果赋予`R.tap(console.log)。
通过删除params
:
const comp = R.pipe(createQuery, R.tap(console.log));