Lodash - 如何在长链序列中执行错误检查

时间:2016-08-28 17:03:14

标签: error-handling lodash chaining

所以我可以说我有一个链式序列,如下所示:

selectedItemsArray

请注意上面代码中的注释。 availableItems可能已过期,因此某些所选项目可能不在.tap中。所以,我最初的想法是使用.thru_.every(selectedItems, _.isObject)(可能是点击)来执行类似tap或类似的操作以捕获错误状态,而不是找到所有项目并抛出如果没有找到所有项目,则会出错。虽然这有点奇怪......处理这类错误检查中间序列的更好方法是什么?

这样的东西确实有效(至少我可以抛出一个错误),但似乎我正在使用 .tap(items => { if (!_.every(items, _.isObject)) throw new Error('Some selected items are no longer available'); }) 来寻找它不适合的东西:

Error:failed to find Build Tools revision 24.0.0 rc2 Install Build Tools 24.0.0 rc2 and sync project

1 个答案:

答案 0 :(得分:0)

您可以使用另一个_.filter来检查元素是否不是对象,还可以处理有问题的值。您可以使用||执行回退代码。请参阅this question

如果您希望代码在第一次失败时崩溃并进行刻录,请使用抛出错误而不是使用console.error的函数。

var available = [
  { id: 1, amount: 2.00 }, 
  { id: 2, amount: 4.00 }
];
var selected = [1, 2, 3];

var amount = _(selected)
    .map(item => _.find(available, {id:item}) || item)
    .filter(item => _.isObject(item) || console.error("Item not available:", item))
    .sumBy('amount');

console.log("Amount:", amount.toFixed(2));
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.min.js"></script>