2016-08-28 17 views
1

は、だから私は、次のようなチェーンの配列を有していたと言うことができます。 selectedItemsArrayが期限切れである可能性があります。したがって、一部の選択された項目がavailableItemsにない可能性があります。だから、最初の考えはまたは.thru(たぶんタップ)を使って_.every(selectedItems, _.isObject)などのようなことをするか、またはすべてのアイテムが見つからないエラー状態をキャッチして、すべてのアイテムが見つからない場合はエラーをスローすることでした。しかし、これは奇妙だと感じています...このタイプのミッドシーケンスをチェックするこのタイプのエラーを処理するより良い方法はありますか?このようなLodashは、エラー長鎖シーケンスでチェックを実行する方法を

何かが(少なくとも私がエラーを投げることができる)作業を行いますが、私はそれをするためのものではない何かのためにtapを使用していますように思える:

.tap(items => { 
    if (!_.every(items, _.isObject)) throw new Error('Some selected items are no longer available'); 
    }) 

答えて

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>

関連する問題