所以我可以说我有一个链式序列,如下所示:
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
答案 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>