所以我一直在寻找一个nodeJS测试中给我的答案。**如果你可以简单地做err.data.error.code,为什么要用_.get(err,['data','error','code'])?你能想出一个更好的名字吗?**经过3天的搜索,我找不到一个答案,我可能需要一些帮助。
if (_.includes(errorCodesOnWhichToRemoveSynchronization,
_.get(err, ['data', 'error', 'code']))) {
// ...
}
4条答案
按热度按时间6qftjkof1#
更新
在没有任何外部库的情况下实现这一点的首选方法是利用optional chaining。
Lodash的
_.get
是故障安全的,如果中间属性不存在,它只返回undefined
,而不是抛出错误。请参见下面的演示:
x一个一个一个一个x一个一个二个x
顺便说一下,在您的情况下,
['data', 'error', 'code']
可以简单地为data.error.code
。p3rjfoxz2#
假设
err.data
未定义或者是一个空对象,在这种情况下,你会得到一个js无法从未定义的对象中读取error
的异常,使用下划线/lodash的get
函数是一种“更安全”的访问方法,它不会抛出那个异常,只返回undefined
。goucqfw63#
可选链接(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining)
qnakjoqk4#
Lodash有几个方法可以访问属性,非常方便,_.get就是其中之一,它的主要思想是让你不必担心路径是否由于
falsy
值而无效。不仅如此,它还有一个defaultValue
第三个参数(与lodash/fp不同),如果请求的路径无效,你可以设置一个默认值:_.has是另一个函数,它将返回一个布尔值来判断所请求的路径是否存在。
_.result在从函数的路径中获取值时非常方便。考虑一下敲除和可观察性,例如从
a
到b
的位置,通常需要执行a().b().c().myValue
...所以使用_.result
,您可以执行以下操作: