gpt4 book ai didi

javascript - Ramda : access input object's properties inside R. ifElse() 函数调用

转载 作者:行者123 更新时间:2023-11-30 19:21:13 26 4
gpt4 key购买 nike

我有这个现有的功能:

  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 元素的数据。

如果使用 native 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

最佳答案

也许您可以使用 pipepath实现这种“ramda 方式”的方法。

首先使用 ramda 的 path() 函数从输入的 jobStruct 对象中提取嵌套的 errorMessage 值。接下来,将其包含在 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",
}
});

这是一个 working example - 希望对您有所帮助!

更新

感谢@customcommander 建议使用 concat对于字符串前缀,以及为第二个分支返回一个空字符串值

关于javascript - Ramda : access input object's properties inside R. ifElse() 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57454572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com