【问题标题】:Railway Oriented Programming with Fluture使用 Fluture 进行面向铁路的编程
【发布时间】:2019-11-08 14:22:34
【问题描述】:

这里解释了面向铁路的编程(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并自动进行绑定?

【问题讨论】:

    标签: javascript functional-programming fluture


    【解决方案1】:

    我不建议您像这样构建您的程序。看起来你有抛出异常和使用承诺的函数(这是你想通过使用 ROP 摆脱的两件事)分布在整个程序中,然后在顶层组合它们。

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

    这意味着您可以将您的组合函数更改为对纯函数和 Future-returning 函数进行操作,这些函数可以直接使用 mapchain 组合。

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2016-06-26
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多