【问题标题】:Execute Fluture task in middle of Sanctuary pipe在 Sanctuary 管道中间执行 Fluture 任务
【发布时间】:2019-11-04 16:17:42
【问题描述】:

我有这样的管道:

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 个异步函数。 我想await for copyImageToPublicPath 然后await for copyFileToPath 然后继续正常流程

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

【问题讨论】:

    标签: javascript functional-programming sanctuary fluture


    【解决方案1】:

    这是排列类型的问题。

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

    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 添加一个可能失败的计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多