使用ramda将参数转发给参数

时间:2017-09-11 14:12:35

标签: javascript functional-programming ramda.js

我正在使用反应项目来玩Ramda和FP。我想学习更多用FP编写干净的代码,所以如果存在更好或更清洁的方式,我会过度思考每一行。 现在我遇到了这个问题,我找不到让我满意的解决方案:

const mapErrorToErrorNode = (onUnknownError, transformUnknownError, getKnownError) => R.pipe(
  R.prop('error'),
  handleErrorIfExists(onUnknownError, transformUnknownError, getKnownError),
  R.assoc('errorNode', R.__, {}),
);

我必须将所有参数作为参数传递给内部函数。当然,这可行,但它不是很好。如果我正在更改内部函数的签名,我还必须在此函数调用中更改它。一种解决方案也是:

const mapErrorToErrorNode = (...args) => R.pipe(
  R.prop('error'),
  R.apply(handleErrorIfExists, args),
  R.assoc('errorNode', R.__, {}),
);

我错过了什么或这是最好的方法吗?

(有关我尝试做的更多背景信息,you can look at this Ramda REPL。)

(我已经查看了How do I pass in multiple parameters into a Ramda compose chain?,但我不认为这适用于我的问题,或者我只是没有得到它)​​

1 个答案:

答案 0 :(得分:0)

你过度复杂了。

const knownErrorCodes = {
  'code-1': 'msg'
};

const defaultErrorMsg = 'unknown';

const mapErrorToCode = R.pipe(
  R.prop('code'), // plucks the error code
  R.propOr(R.__, knownErrorCodes, defaultErrorMsg) // gives you the message or the default
);

console.log(mapToErrorCode({ code: 'code-1' })); // msg
console.log(mapToErrorCode({ code: 'code-2' })); // unknown