2016-08-29 4 views
0

コードのこのビットは:Lodash - 変数宣言の後も連鎖できますか?

var foo = [1, 2, 3], 
    bar = _.chain(foo) 
      .map(number => number * 2); 


console.log(bar.value()); 

bar.tap(numbers => { 
    numbers.push(10000); 
}); 

console.log(bar.value()); 

10000bar.value()に追加されません。しかし、実際の可変チェーン中にタップをチェーンに移動すると、正常に動作します。私はこれがtapが呼び出されたコンテキストと関係があると確信していますが、誰でも説明できますか?鎖を初期化し、後でそれを修正するのがいいと思うようです。ありがとう!デモンストレーション用

ビン:jsbin.com上http://jsbin.com/kidomeqalo/edit?html,js,console

JSビン

+1

あなたは確かに '.tap(numbers => {{' '? – Bergi

+0

のように見えます。他のほとんどのメソッドのように' tap''は怠惰です。 '.value結果は(もちろん、副作用のために使うべきではありません) – Bergi

+0

@Bergiはい、ありがとう、それはタイプミスです – Greg

答えて

1

だけbar.tap();は何も変わりません加えます。あなたが実際にチェーンに含める必要があります。

bar = bar.tap(numbers => { 
    numbers.push(10000); 
}); 
console.log(bar.value()); 

または

console.log(bar.tap(numbers => { 
    numbers.push(10000); 
}).value()); 

その上で、あなたは副作用を実行するためのtapを使用しないでください。むしろbar.concat(10000).value()などを使用してください。これは、何かを変更する代わりに機能的な方法で新しい結果を作成することを明らかにしています。シーケンスが遅れて評価されると特に混乱します。

関連する問題