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))
}
答案 0 :(得分:1)
计算表达式是分别使用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 {..}