这段代码:
[{
'id': 'Group A',
'name': 'Group A',
'value': 11
}, {
'id': 'Group B',
'name': 'Group B',
'value': 24.33333
}]
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());
不会添加到10000
。但是,如果我在实际变量链中将水龙头移动到链条,它可以正常工作。我确定这与调用bar.value()
的地方有关,但任何人都可以解释一下吗?看起来好像初始化一个链然后再修改它会很好。谢谢!
Bin示范:http://jsbin.com/kidomeqalo/edit?html,js,console
jsbin.com上的JS Bin
答案 0 :(得分: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()
或类似的东西,这清楚地表明它以功能的方式创建了一个新的结果,而不是改变任何东西 - 随着序列被懒惰地评估,这变得特别混乱。