背景

我正在尝试使用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炸毁了?
我究竟做错了什么?

最佳答案

您遇到的问题是因为您正在调用createQuery(params),然后尝试将结果视为函数。

您就是示例函数comp可以这样更新:

const comp = params => R.pipe(createQuery, R.tap(console.log))(params)

然后R.pipeparams和参数传递给createQuery,然后将其结果提供给`R.tap(console.log)的结果。

通过删除params的直接应用程序,可以将其简化为以下内容:
const comp = R.pipe(createQuery, R.tap(console.log));

07-24 16:39