gpt4 book ai didi

javascript - 在 Sanctuary 管道中间执行 Fluture 任务

转载 作者:行者123 更新时间:2023-11-28 12:53:13 26 4
gpt4 key购买 nike

我有一个像这样的管道:

S.pipe([
getRequestFile, // not async
S.chain(saveTemporary), // not async
S.chain(copyImageToPublicPath), // async
S.chain(copyFileToPath), // async
S.chain(someLoggingFunction), // not async
S.chain(sendResponse), // not async
]);

该管道中间有 2 个异步函数。我想等待 copyImageToPublicPath,然后等待 copyFileToPath,然后继续正常流程

经过一番搜索,我发现有 Future.tryP 函数用于执行 async 但如何在该管道中间使用 Fluture

最佳答案

这是排列类型的问题。

让我们编写一些类型定义以在示例中使用:

foo :: String -> String
bar :: String -> Future Error String
baz :: String -> Array String

现在,让我们一步步创建我们的程序......

//    program :: a -> a
const program = S.pipe ([
]);
//    program :: String -> String
const program = S.pipe ([
foo, // :: String
]);
//    program :: String -> Future Error String
const program = S.pipe ([
foo, // :: String
bar, // :: Future Error String
]);
//    program :: String -> Future Error (Array String)
const program = S.pipe ([
foo, // :: String
bar, // :: Future Error String
S.map (baz), // :: Future Error (Array String)
]);

要对 Future a b 值内的 b 进行操作,我们使用 S.mapS.chain.

S.map 可能会导致不必要的嵌套:

fut :: Future Error String

quux :: String -> Future Error Number

S.map (quux) (fut) :: Future Error (Future Error Number)

我们可以使用S.chain来避免这种嵌套:

fut :: Future Error String

quux :: String -> Future Error Number

S.chain (quux) (fut) :: Future Error Number

考虑一下 S.map 向某些计算添加一个不会失败的操作可能会有所帮助,而 S.chain 添加一个可以的计算 失败。

关于javascript - 在 Sanctuary 管道中间执行 Fluture 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58697289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com