管道 Promise.Parallel

piping Promise.Parallel

Promise.Parallel 的结果是一个可以通过 let 绑定访问的承诺。但是有没有一种方法可以直接通过管道传输该结果并在没有 let! 的情况下访问它。 IE。而不是这个:

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))
 }

计算表达式是使用 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 {..}