Зачем использовать _.get (err, ['data', 'error', 'code']), если вы можете просто сделать err.data.error.code? - PullRequest
0 голосов
/ 31 августа 2018

Итак, я искал ответ, данный мне в тесте nodeJS. Зачем использовать _.get (err, ['data', 'error', 'code']), если вы можете просто сделать err.data.error.code? И можете ли вы придумать лучшее название для err здесь? после 3 дней поиска я не могу найти ответ, возможно, мне нужна помощь Код:

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

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Представьте себе err.data - неопределенный или пустой объект. В этом случае вы получите исключение, что js не может прочитать error из неопределенного. Использование функции подчеркивания / lodash get является более безопасным способом доступа к ней. Он не выдает это исключение и просто возвращает undefined.

0 голосов
/ 31 августа 2018

В Lodash есть несколько методов для доступа к свойствам, которые очень удобны, и _. Get является одним из них, где основная идея состоит в том, чтобы вам не приходилось беспокоиться, если путь неверен из-за falsy значение по пути. Мало того, он имеет defaultValue 3-й параметр (отличается от lodash / fp), где вы можете установить значение по умолчанию, если запрашиваемый путь неверен:

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

_. Has - это еще один, который возвращает логическое значение, если запрошенный путь существует или нет.

_. Result очень удобно, когда дело доходит до получения значения из пути, проходящего через функции. Подумайте о нокауте и наблюдаемых, например, где можно получить от a до b, вам обычно нужно будет сделать a().b().c().myValue ... так что с _.result вы бы сделали:

_.result(obj, 'a.b.c.myValue')
0 голосов
/ 31 августа 2018

Lodash's _.get является отказоустойчивым. Если какое-либо из промежуточных свойств не существует, оно просто возвращает undefined вместо выдачи ошибки.

См. Демо ниже:

var obj = {
  data: {
    
  }
};

try {
  console.log(obj.data.error.code);
} catch(e) {
  console.log('regular method throws error');
}

console.log('lodash returns', _.get(obj, ['data', 'error', 'code']));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

Кстати, в вашем случае ['data', 'error', 'code'] может быть просто data.error.code.

...