管道Promise.Parallel

时间:2019-02-24 00:17:04

标签: f# fable-f#

Promise.Parallel的结果是一个单应诺,可以通过let绑定进行访问。但是有没有一种方法可以直接通过管道传递结果,而无需let!就可以访问它。即而不是这样:

promise {
    let! responses = 
        [| "https://somesite.com"               
           "https://somesite2.com"|]
        |> Array.map (fun url -> fetch url [])
        |> Promise.Parallel
    let! results = 
        responses 
        |> Array.map (fun r -> doSomething r))
 }

我可以做这样的事情吗?

promise {
    let! results = 
        [| "https://somesite.com"               
           "https://somesite2.com"|]
        |> Array.map (fun url -> fetch url [])
        |> Promise.Parallel
        |> Promise.Resolve <===== is there such a thing
        |> Array.map (fun r -> doSomething r))
 }

1 个答案:

答案 0 :(得分:1)

计算表达式是分别使用bindmap函数或其等效运算符>>=|>>的替代方法。

这些运算符可以这样定义:

let inline (>>=) v f = Promise.bind  f v
let inline (|>>) v f = Promise.map   f v

如果Promise.bind不存在,则可以这样定义运算符:

let inline (>>=) m f = promise.Bind(m, f)
let inline (|>>) m f = promise.Bind(m, f >> eff.Return)

使用这些运算符,您可以执行以下操作:

[| "https://somesite.com"               
   "https://somesite2.com" |]
|>  Array.map (fun url -> fetch url [])
|>  Promise.Parallel
|>> Array.map (fun r -> doSomething r)

使用操作员无需CE:promise {..}