如何有效地调试方法链接函数参数?

wal*_*rra 7 javascript underscore.js lodash

看看下面的代码结构:

myFunction(
  _(myArray)
    .filter({ keep: true })
    .uniq('id')
    .value()
);
Run Code Online (Sandbox Code Playgroud)

myFunction()以lodash为例进行一些数组转换的结果.虽然我喜欢代码的样式,但我发现很难调试并最终重构它以将lodash代码放在另一个函数中或首先将其分配给变量,然后将变量传递给myFunction().

您是否知道在不进行重构的情况下调试函数参数代码的有效方法?一些想法:

  • 因为,人们不能添加console.log正确的权利.
  • 在Chrome DevTools中,不可能在.filter()和之间设置断点.uniq()

sta*_*las 6

最好的方法是插入步骤:

.tap(console.log)
Run Code Online (Sandbox Code Playgroud)

其他方法:

创建混合功能

var debug = function (val) {
    console.log(val);
    return val;
}
_.mixin({'debug': debug})
Run Code Online (Sandbox Code Playgroud)

并像这样使用

_(myArray)
    .debug()
    .filter({ keep: true })
    .debug()
    .uniq('id')
    .debug()
    .value()
Run Code Online (Sandbox Code Playgroud)

或者您可以在使用之前先覆盖lodash函数,例如

_.filter = _.wrap(_.filter, function(func, val) {
    console.log(func(val));
    return func(val);
});
Run Code Online (Sandbox Code Playgroud)