Ramda:如果 func returns 为真值,则在 compose 中使用它,否则 return 原样

Ramda: if func returns truthy value, use it in compose, else return as is

Ramda 是否有任何简洁的方式来编写这样的内容:

 const ifOkCompose = (...args) => {
            const r = foo(...args);

            if (r) {
                return compose(bar1, bar2)(r);
            }

            return r;
        };

如果 foo() return 的值为真值,将其发送到 compose,否则只是 return。有 'when',但它会 return 个参数而不是 returned 'foo(...)' 的值。

换句话说,我有一个函数 foo 可能 return 未定义,我在 compose 中使用它作为 compose(bar1, bar2, foo)。如果 foo(...) returns undefined 我想踢出 compose 而只是 return undefined.

我认为这样的方法可行:

const ifOkCompose = pipe(foo, when(identity, compose(bar1, bar2)));
  1. 初始参数传递给foo
  2. 然后将结果传递给 identity 执行真实性检查
  3. 当为真时,结果传递给 compose(bar1, bar2)
  4. 否则结果原样返回

R.composeWith 的文档示例接近您的要求。

const composeWhileNotNil = R.composeWith((f, res) => R.isNil(res) ? res : f(res))

composeWhileNotNil([bar1, bar2, foo])

最大的区别在于,这将在 any 无响应时停止合成,而不仅仅是第一个。显然,如果您只想停止 undefined 而不是 null.

,则可以轻松更改它