一种选择是使用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);
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用Sanctuary,当函数应用于错误类型的参数时,它会引发信息异常.
我在我的业余项目中也遇到了与 Ramda 相同的问题。这就是让我暂时放弃生产的原因。
截至撰写此答案时,在 JavaScript 中调试无点样式程序非常困难甚至不可能。这是我不使用它的唯一原因。即使有良好的单元测试覆盖率,我发现开发周期太长,并且调试起来很困难。
我将对此进行扩展:虽然R.tap()存在 Ramda-debug 等工具,但它们是主动调试工具,您需要将其添加到项目中,并且在某些情况下,添加到代码中并在稍后的生产中删除。但是,当您收到错误消息时,您不会获得有用的堆栈跟踪,并且无法在调试器中单步执行以找出流程,您需要提前了解流程。