我有这个现有功能:
const inferProcessingError = R.ifElse(
R.propEq('conversionJobStatus', 3),
R.always('Last Process failed with error; please contact DevOps'),
R.always(null)
);
像这样被称为:
const msg = inferProcessingError(jobStruct || {});
与此工作结构:
{"id":9,"mediaGroupId":1000000,"conversionJobStatus":3,
"errorDetails": {
"Cause": {
"errorMessage": "MediaConvert Job Failed with ERROR status: ERROR Video codec [indeo4] is not a supported input video codec",
},
"Error": "Error",
}
}
并且我需要创建一个错误消息字符串,其中包含来自
Cause.errorMessage
元素的数据。使用本机JavaScript函数,这简直太简单了,但是我正在学习Ramda,并且只想修改现有代码以包含在错误消息中。
R.prop('Cause')['errorMessage']
可以工作,除了我无法弄清楚如何引用传递给inferProcessingError
语句的jobStruct。我可以看到
R.ifElse
和后续的Ramda函数能够获取该引用,但是当我在错误消息字符串中嵌入R.prop('Cause')
时,它将解析为一个函数,而不是Cause
元素的值,因为似乎正在等待数据结构。那么...我如何获得对jobStruct参考的访问? (此处未定义
arguments
)。更新:
我可以通过引用
R.Prop('ErrorDetails', jobStruct)['Cause']['errorMessage']
中的原始jobStruct来使其工作,但这对我来说似乎有点笨拙……但是,如果对
inferProcessingError
的调用实际上是在map
语句内,并且引用了较大结构的元素,则映射索引不可用于引用R.prop
的数据结构。 最佳答案
也许您可以使用pipe
和path
方法来实现这种“ ramda方式”。
首先使用ramda的path()
函数从输入的errorMessage
对象中提取嵌套的jobStruct
值。接下来,将其包含在pipe()
中,该concat
会将提取的消息转换为使用自定义错误前缀格式化的字符串:
const incCount = R.ifElse(
R.propEq('conversionJobStatus', 3),
/* Evaluate this pipe if the error case is satisfied */
R.pipe(
/* Path to extract message from input object */
R.path(["errorDetails", "Cause", "errorMessage"]),
/* Prefix string to extracted error message */
R.concat('Custom error prefix:')),
R.always('')
);
incCount({"id":9,"mediaGroupId":1000000,"conversionJobStatus":3,
"errorDetails": {
"Cause": {
"errorMessage": "MediaConvert Job Failed with ERROR etc etc",
},
"Error": "Error",
}
});
这是working example-希望对您有所帮助!
更新资料
感谢@customcommander的建议使用作为字符串前缀,并为第二个分支返回空字符串值