javascript - Ramda:在 R.ifElse() 函数调用中访问输入对象的属性
问题描述
我有这个现有的功能:
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 || {});
有了这个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,并且只想修改现有代码以包含在错误消息中。
AnR.prop('Cause')['errorMessage']
可以工作,只是我不知道如何引用传递给inferProcessingError
语句的 jobStruct。
我可以看到R.ifElse
后续的 Ramda 函数能够获取该引用,但是当我R.prop('Cause')
在错误消息字符串中嵌入 an 时,它解析为一个函数而不是Cause
元素的值,因为它似乎正在等待数据结构。
那么......我如何获得对 jobStruct 参考的访问权限?(arguments
此处未定义)。
更新:
我可以通过引用原来的 jobStruct 来让它工作,R.Prop('ErrorDetails', jobStruct)['Cause']['errorMessage']
但这对我来说似乎相当笨拙......
但是,如果调用inferProcessingError
实际上是在map
语句内部并引用更大结构中的元素,则映射索引不可用于引用R.prop
.
解决方案
也许您可以使用pipe
andpath
方法来实现这种“ramda 方式”。
首先使用 ramda 的函数从输入对象path()
中提取嵌套值。接下来,将其包含在将提取的消息转换为使用自定义错误前缀格式化的字符串中:errorMessage
jobStruct
pipe()
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",
}
});
这是一个工作示例-希望对您有所帮助!
更新
感谢@customcommander 建议使用concat
字符串前缀,以及为第二个分支返回一个空字符串值
推荐阅读
- angular - 无法访问使用 Angular 的 Oauth 2.0 保护的 API
- curl - 如何使用邮递员点击 curl -k 命令
- c# - 如何使用 MAPI C# 在 Microsoft Outlook 中添加 ost 文件
- python - 我们如何组织链表递归关系来合并两个排序的链表?
- django - 解决PostgreSQL数据库中的连接拒绝错误
- python - 如何对齐应用程序中的 ttk 小部件?
- openlayers - 如何在 openlayers 6 中叠加 TIF 图像?
- mysql - 如何使用 unix 套接字连接 MySQL?
- json - 在 JSON 中创建嵌套数组
- google-analytics - 带有元素可见性触发器的事件标签未显示在 Analytics 中