NodeJS 如果可以简单地执行err.data.error.code,为什么还要使用_.get(err,['data','error','code'])呢?

hxzsmxv2  于 2023-01-25  发布在  Node.js
关注(0)|答案(4)|浏览(146)

所以我一直在寻找一个nodeJS测试中给我的答案。**如果你可以简单地做err.data.error.code,为什么要用_.get(err,['data','error','code'])?你能想出一个更好的名字吗?**经过3天的搜索,我找不到一个答案,我可能需要一些帮助。

if (_.includes(errorCodesOnWhichToRemoveSynchronization,
    _.get(err, ['data', 'error', 'code']))) {
  // ...
}
6qftjkof

6qftjkof1#

更新

在没有任何外部库的情况下实现这一点的首选方法是利用optional chaining

err?.data?.error?.code

Lodash的_.get是故障安全的,如果中间属性不存在,它只返回undefined,而不是抛出错误。
请参见下面的演示:
x一个一个一个一个x一个一个二个x
顺便说一下,在您的情况下,['data', 'error', 'code']可以简单地为data.error.code

p3rjfoxz

p3rjfoxz2#

假设err.data未定义或者是一个空对象,在这种情况下,你会得到一个js无法从未定义的对象中读取error的异常,使用下划线/lodash的get函数是一种“更安全”的访问方法,它不会抛出那个异常,只返回undefined

qnakjoqk

qnakjoqk4#

Lodash有几个方法可以访问属性,非常方便,_.get就是其中之一,它的主要思想是让你不必担心路径是否由于falsy值而无效。不仅如此,它还有一个defaultValue第三个参数(与lodash/fp不同),如果请求的路径无效,你可以设置一个默认值:

_.get(object, 'a.b.c', 'foo');  // if a.b.c is falsy you would get 'foo'

_.has是另一个函数,它将返回一个布尔值来判断所请求的路径是否存在。
_.result在从函数的路径中获取值时非常方便。考虑一下敲除和可观察性,例如从ab的位置,通常需要执行a().b().c().myValue...所以使用_.result,您可以执行以下操作:

_.result(obj, 'a.b.c.myValue')

相关问题