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

Lodash - can you continue chaining after variable declaration?

这段代码:

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()。但是,如果我在实际变量链中将水龙头移动到链中,它就可以正常工作。我确定这与调用 tap 的上下文有关,但有人能解释一下吗?似乎初始化一个链然后稍后修改它会很好。谢谢!

演示容器:http://jsbin.com/kidomeqalo/edit?html,js,console

JS Bin 在 jsbin.com

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