所以我们正在使用非常漂亮的ramda库,这很棒,因为我们可以使用很大程度上无点的代码。这样做的问题是,当出现问题时,我们的代码中存在的内容要少得多;大多数运行时错误是由于滥用组合的ramda函数而发生的。结合这个将这些函数传递给一个使用大量重定向的框架(我们正在使用react / redux),并且经常出现问题时,它只是在库中的代码很深,并且很难找到我去的地方错。
有没有办法在不偏离无点风格的情况下缓解这个问题?
答案 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()
等工具,但它们是有效的调试工具,需要添加到项目中,在某些情况下,还要添加到代码中并在生产中删除。但是,当您收到错误消息时,您没有获得有用的堆栈跟踪,并且您无法在调试器中单步执行以确定流程,您需要提前知道流程。