Functional programming 如何根据条件从一个任务切换到另一个任务

Functional programming 如何根据条件从一个任务切换到另一个任务,functional-programming,fp-ts,Functional Programming,Fp Ts,我是fp ts的大一新生,试图理解如何组合一些东西 例如,我有一个taskother,它正在执行fetch,根据一个fetch的结果,我想运行另一个fetch或跳转到下一步,目前,我已经这样做了。也许有人知道更好的方法 pipe( tryCatch( () => fetch('https://example.com'), reason => String(reason) ), chain( d => d ? tryCatch(

我是fp ts的大一新生,试图理解如何组合一些东西

例如,我有一个taskother,它正在执行fetch,根据一个fetch的结果,我想运行另一个fetch或跳转到下一步,目前,我已经这样做了。也许有人知道更好的方法


pipe(
  tryCatch(
    () => fetch('https://example.com'),
    reason => String(reason)
  ),
  chain(
    d => d ?
    tryCatch(
      () => fetch('https://example.com'),
      reason => String(reason)
    ) : right({})
  ),
  chain(
    finalResult => {
      //console.log(finalResult)
      return right(finalResult)
    }
  )
)

感谢阅读:)

管道组合器似乎是可变的(变量数量)<代码>管道是功能组合的一种变体,无法将其短路。考虑到短路语义,您可能需要kleisli组合,即类似于
pipe
的可变组合器,用于组合一元动作,即返回一元类型的函数。我不知道fp ts中是否有这样一个组合符。@Dmytro
d
在你的例子中是一个
boolean
?@GiovanniGonzaga如果它是一个布尔对象或另一个对象,它会改变一些东西吗?@DmytroFilipenko我问这个问题,因为通常有一些组合符是用类似于
if
的应用程序或单子来定义的
when
在这方面可能会有所帮助。无论如何,我看不出你的代码有任何问题。一种更为简洁的方法是使用
折叠
over
布尔
,而不是布尔型的内置三元语法来选择要继续的正确任务。请参见我在此处添加的函数: