点免费调试

时间:2016-10-27 16:38:05

标签: javascript debugging pointfree ramda.js

所以我们正在使用非常漂亮的ramda库,这很棒,因为我们可以使用很大程度上无点的代码。这样做的问题是,当出现问题时,我们的代码中存在的内容要少得多;大多数运行时错误是由于滥用组合的ramda函数而发生的。结合这个将这些函数传递给一个使用大量重定向的框架(我们正在使用react / redux),并且经常出现问题时,它只是在库中的代码很深,并且很难找到我去的地方错。

有没有办法在不偏离无点风格的情况下缓解这个问题?

2 个答案:

答案 0 :(得分:6)

一种选择是使用R.tap,如下所示:

const f = R.pipe(
  R.tap(console.log),  // logs x
  g,
  R.tap(console.log),  // logs g(x)
  h,
  R.tap(console.log),  // logs h(g(x))
  i,
  R.tap(console.log),  // logs i(h(g(x)))
  j,
  R.tap(console.log)   // logs j(i(h(g(x))))
);

f(x);

另一种选择是使用Sanctuary,当函数应用于错误类型的参数时会引发信息异常。

答案 1 :(得分:3)

我在我的项目中遇到了与Ramda相同的问题。这就是让我现在放弃生产的原因。

截至撰写本答案时,用JavaScript调试无点样式程序很难实现。这是我不使用它的唯一原因。即使有良好的单元测试覆盖率,我发现开发周期太长,调试也很难。

我将对此进行扩展:虽然存在Ramda-debug和R.tap()等工具,但它们是有效的调试工具,需要添加到项目中,在某些情况下,还要添加到代码中并在生产中删除。但是,当您收到错误消息时,您没有获得有用的堆栈跟踪,并且您无法在调试器中单步执行以确定流程,您需要提前知道流程。