Fla*_*nix 5 javascript functional-programming ramda.js
我正在尝试使用 Ramda 编写 2 个函数,但是我遇到了 问题pipe,这意味着我不知道如何使用它。
假设我有一个返回数组的函数:
var createQuery = params => [ getSQLQuery( params ), [ getMarket() ] ];
var getSQLQuery = ( { lang } ) => `My query is ${lang}`;
var getMarket = () => "en_en"
Run Code Online (Sandbox Code Playgroud)
因此,打电话时createQuery({ lang: "es" })我将有以下的输出:[ "My query is es", ["en_en"] ];
现在,让我们也假设我是一个讨厌的男孩,我想利用这个重要的信息!
R.tap(console.log, createQuery({lang: "es"}))
Run Code Online (Sandbox Code Playgroud)
一个组合(好吧,一个管道,准确地说)将是:
R.pipe(
createQuery( {lang: "en"} ),
R.tap(console.log)
);
Run Code Online (Sandbox Code Playgroud)
它返回一个函数。
现在假设我想执行上述功能:
var comp = params => R.pipe(
createQuery( params ),
R.tap(console.log)
)(params);
comp({lang: "uk"}); //Blows Up!?
Run Code Online (Sandbox Code Playgroud)
为什么我的函数爆炸了f.apply is not a function??我究竟做错了什么?
您遇到的问题是因为您正在调用createQuery(params),然后尝试将结果视为函数。
您的示例函数comp可以像这样更新:
const comp = params => R.pipe(createQuery, R.tap(console.log))(params)
Run Code Online (Sandbox Code Playgroud)
并将参数R.pipe传递params给createQuery,然后将其结果提供给 `R.tap(console.log) 的结果。
通过删除 的直接应用,这可以简化为以下内容params:
const comp = R.pipe(createQuery, R.tap(console.log));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6315 次 |
| 最近记录: |