我在用:
- 斯卡拉 2.10
- 玩 2.1
目前,我正在使用Future
来自 的类scala.concurrent._
,但我愿意尝试另一个 API。
我无法将多个期货的结果组合成一个列表 [(字符串,字符串)]。
以下Controller
方法成功地将单个 Future 的结果返回到 HTML 模板:
def test = Action { implicit request =>
queryForm.bindFromRequest.fold(
formWithErrors => Ok("Error!"),
query => {
Async {
getSearchResponse(query, 0).map { response =>
Ok(views.html.form(queryForm,
getAuthors(response.body, List[(String, String)]())))
}
}
})
}
该方法getSearchResult(String, Int)
执行 Web 服务 API 调用并返回 Future[play.api.libs.ws.Response]。该方法getAuthors(String, List[(String, String)])
返回一个 List[(String, String)] 到 HTML 模板。
现在,我正在尝试循环调用getSearchResult(String, Int)
以for
获取多个响应主体。以下内容应该可以让我了解我正在尝试做的事情,但我得到一个编译时错误:
def test = Action { implicit request =>
queryForm.bindFromRequest.fold(
formWithErrors => Ok("Error!"),
query => {
Async {
val authors = for (i <- 0 to 100; if i % 10 == 0) yield {
getSearchResponse(query, i)
}.map { response =>
getAuthors(response.body, List[(String, String)]())
}
Ok(views.html.form(queryForm, authors))
}
})
}
类型不匹配; 找到:scala.collection.immutable.IndexedSeq[scala.concurrent.Future[List[(String, String)]]] 需要:List[(String, String)]
如何将多个Future
对象的响应映射到单个对象Result
?