使用Fluture开发面向铁路的程序设计

时间:2019-11-08 14:22:34

标签: javascript functional-programming fluture

此处介绍了面向铁路的编程(ROP):

https://fsharpforfunandprofit.com/rop/

是否可以通过Fluture

使用此模式

我可以使用以下两种辅助方法进行ROP:

const bind = f => x => Future.attempt(() => f(x));
const bindAsync = f => x => Future.tryP(() => f(x));

Future.of("TEST")
    .chain(bind(doThis))
    .chain(bind(doThat))
    .chain(bindAsync(doThisAsync))
    .chain(bindAsync(doThatAsync))
    .chain(bind(doAnotherThing))
    .chain(bindAsync(doAnotherThingAsync))
    .
    .
    .

是否有更好的方法来删除bindbindAsync并自动进行绑定?

1 个答案:

答案 0 :(得分:1)

我不建议像这样构造您的程序。看起来您有一些引发异常并使用promise(这是您希望通过使用ROP摆脱的两件事)的函数,它们分散在整个程序中,然后在顶层进行组合。

相反,您应该包装正在使用的库,以便摆脱promise / exception,并将它们转换为尽可能接近问题库的future。例如。如果您使用诺言进行HTTP网络调用,请包装网络库,以便它返回期货。

这意味着您可以随后将合成功能更改为可以使用mapchain直接组成的纯函数和Future-returning函数。