在管道函数内检查值
Check value in when inside an pipe function
如果 R.cond
解析一个未定义的值,应该执行一个 pipe
函数 并将值 传递给 pipe
函数。 .
const publishClient = (resp, cb) => {
console.log('Publishing ', resp);
cb()
}
// Applying same process
const format = (letter) => ({'letter': letter});
const concact = R.curry((num, letter) => num + '=' + letter);
// my method publish
const publish = partialRight(publishClient, [function() { console.log('Callback called!') }]);
// conditions to check
const condToRes = R.cond([
[equals(1), concact('A')],
[equals(2), concact('B')],
[equals(3), concact('C')],
[equals(4), concact('D')],
[equals(5), concact('E')],
]);
// Publish only if condition resolves
// const resolveCond = when(condToRes, pipe(format, publish)) // NOT WORK,concact FN is ignored!
const resolveCond = pipe( // TRYING
condToRes,
when(HOW TO CHECK condToRes IS NOT NIL, pipe(format, publish))
);
// Call
resolveCond(1)
// SHOULD DISPLAY ..
Publishing
{"letter":"A=1"}
Callback called!
要测试一个值是 null
还是 undefined
,您可以使用 R.isNil
。当与 R.complement
组合子组合时,这将产生一个函数,当应用于 not null
/[= 的值时,该函数的计算结果为 true
13=].
这可用于将您的示例更新为:
const resolveCond = pipe(
condToRes,
when(complement(isNil), pipe(format, publish))
);
或者,可以使用 R.unless
代替 R.when
,这样就无需将 R.isNil
换成 R.complement
。
const resolveCond = pipe(
condToRes,
unless(isNil, pipe(format, publish))
);
这两种方法是等效的,尽管 R.unless
可能读起来更好一些。
如果 R.cond
解析一个未定义的值,应该执行一个 pipe
函数 并将值 传递给 pipe
函数。 .
const publishClient = (resp, cb) => {
console.log('Publishing ', resp);
cb()
}
// Applying same process
const format = (letter) => ({'letter': letter});
const concact = R.curry((num, letter) => num + '=' + letter);
// my method publish
const publish = partialRight(publishClient, [function() { console.log('Callback called!') }]);
// conditions to check
const condToRes = R.cond([
[equals(1), concact('A')],
[equals(2), concact('B')],
[equals(3), concact('C')],
[equals(4), concact('D')],
[equals(5), concact('E')],
]);
// Publish only if condition resolves
// const resolveCond = when(condToRes, pipe(format, publish)) // NOT WORK,concact FN is ignored!
const resolveCond = pipe( // TRYING
condToRes,
when(HOW TO CHECK condToRes IS NOT NIL, pipe(format, publish))
);
// Call
resolveCond(1)
// SHOULD DISPLAY ..
Publishing
{"letter":"A=1"}
Callback called!
要测试一个值是 null
还是 undefined
,您可以使用 R.isNil
。当与 R.complement
组合子组合时,这将产生一个函数,当应用于 not null
/[= 的值时,该函数的计算结果为 true
13=].
这可用于将您的示例更新为:
const resolveCond = pipe(
condToRes,
when(complement(isNil), pipe(format, publish))
);
或者,可以使用 R.unless
代替 R.when
,这样就无需将 R.isNil
换成 R.complement
。
const resolveCond = pipe(
condToRes,
unless(isNil, pipe(format, publish))
);
这两种方法是等效的,尽管 R.unless
可能读起来更好一些。