我正在使用反应项目来玩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?,但我不认为这适用于我的问题,或者我只是没有得到它)
答案 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