首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在避难所管道中间执行Fluture任务

在避难所管道中间执行Fluture任务
EN

Stack Overflow用户
提问于 2019-11-05 00:17:42
回答 1查看 269关注 0票数 1

我有一个这样的烟斗:

代码语言:javascript
复制
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
]);

在此管道的中间有两个异步函数。我希望对copyImageToPublicPath使用await,然后对copyFileToPath使用await,然后继续正常流程

经过一些搜索,我发现有用于执行asyncFuture.tryP函数,但是如何在此管道中间使用Fluture

EN

回答 1

Stack Overflow用户

发布于 2019-11-05 02:30:57

这是一个排列类型的问题。

让我们构造一些类型定义,以便在示例中使用:

代码语言:javascript
复制
foo :: String -> String
bar :: String -> Future Error String
baz :: String -> Array String

现在,让我们逐步创建我们的程序…

代码语言:javascript
复制
//    program :: a -> a
const program = S.pipe ([
]);
代码语言:javascript
复制
//    program :: String -> String
const program = S.pipe ([
  foo,               // :: String
]);
代码语言:javascript
复制
//    program :: String -> Future Error String
const program = S.pipe ([
  foo,               // :: String
  bar,               // :: Future Error String
]);
代码语言:javascript
复制
//    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可能会导致不必要的嵌套:

代码语言:javascript
复制
fut :: Future Error String

quux :: String -> Future Error Number

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

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

代码语言:javascript
复制
fut :: Future Error String

quux :: String -> Future Error Number

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

考虑到S.map将不会失败的操作添加到某些计算中可能会有所帮助,而S.chain会添加可能失败的计算。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58697289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档