Lodash - 你可以在变量声明后继续链接吗?

时间:2016-08-29 01:31:07

标签: javascript lodash chaining

这段代码:

[{
    '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

1 个答案:

答案 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()或类似的东西,这清楚地表明它以功能的方式创建了一个新的结果,而不是改变任何东西 - 随着序列被懒惰地评估,这变得特别混乱。