管道 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))
}
计算表达式是使用 bind
、map
函数或其等效运算符 >>=
和 |>>
的替代方法。
这些运算符可以这样定义:
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 {..}
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))
}
计算表达式是使用 bind
、map
函数或其等效运算符 >>=
和 |>>
的替代方法。
这些运算符可以这样定义:
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 {..}