Functional programming 如何根据条件从一个任务切换到另一个任务
我是fp ts的大一新生,试图理解如何组合一些东西 例如,我有一个taskother,它正在执行fetch,根据一个fetch的结果,我想运行另一个fetch或跳转到下一步,目前,我已经这样做了。也许有人知道更好的方法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(
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中是否有这样一个组合符。@Dmytrod
在你的例子中是一个boolean
?@GiovanniGonzaga如果它是一个布尔对象或另一个对象,它会改变一些东西吗?@DmytroFilipenko我问这个问题,因为通常有一些组合符是用类似于if
的应用程序或单子来定义的when
在这方面可能会有所帮助。无论如何,我看不出你的代码有任何问题。一种更为简洁的方法是使用折叠
over布尔
,而不是布尔型的内置三元语法来选择要继续的正确任务。请参见我在此处添加的函数: