所以我目前有一个 type 序列,seq<System.Threading.Tasks.Task<Restaurant>>
我想把它变成一个 type 序列seq<Restaurant>
。
我目前正在使用 TaskBuilder.fs 库,根据我的研究,我需要使用 let!或者做!对于这种情况,但它们需要task {}
与 Seq.map 一起使用时带回相同的任务类型。
let joinWithReviews (r : Restaurant) =
task {
let! reviewResult = Reviews.Database.getByLocationId cnf.connectionString r.Restaurant_Id
match reviewResult with
| Ok reviewResult ->
let restaurant = { r with Reviews = (List.ofSeq reviewResult)}
return restaurant
| Error ex ->
return raise ex
}
let indexAction (ctx : HttpContext) =
task {
let (cnf:Config) = Controller.getConfig ctx
let! result = Restaurants.Database.getAll cnf.connectionString
match result with
| Ok result ->
let restaurantWithReviews = (Seq.map joinWithReviews result)
return index ctx (List.ofSeq restaurantWithReviews)
| Error ex ->
return raise ex
}
所以我的结果是类型Seq<Restaurant>
,我需要为每家餐厅添加评论,所以我使用 Seq.map 来获取 restaurantWithReviews 这是seq<System.Threading.Tasks.Task<Restaurant>>
我无法使用的类型。