Play for Scala 中的嵌套期货无法编译
Nested futures in Play for Scala does not compile
Play for Scala 中的这个 Action.async
方法应该仅在第一个 future returns 1
时执行第二个 future,这就是它们嵌套的原因。如果第一个 future returns 的结果不同于 1
那么第二个 future 永远不应该被执行。但是我在 f2.map
中遇到以下编译错误。为什么会出现此错误以及如何解决?
type mismatch; found :
scala.concurrent.Future[scala.concurrent.Future[play.api.mvc.Result]]
required: play.api.mvc.Result
def index = Action.async { request =>
val f1 = Future {1}
f1.map {
access => if (access==1) {
val f2 = Future {2}
f2.map { // <-- compilation error
result => {
val json = JsObject(Seq(
"acc" -> JsNumber(access),
"ret" -> JsString("0")
))
Ok(json)
}
}
}
else {
val json = JsObject(Seq(
"acc" -> JsNumber(0),
"ret" -> JsString("0")
))
Future.successful(Ok(json))
}
}
}
你基本上在那里 - 只是 f1 上的 flatMap 而不是地图,因为你正在创造另一个未来。
Play for Scala 中的这个 Action.async
方法应该仅在第一个 future returns 1
时执行第二个 future,这就是它们嵌套的原因。如果第一个 future returns 的结果不同于 1
那么第二个 future 永远不应该被执行。但是我在 f2.map
中遇到以下编译错误。为什么会出现此错误以及如何解决?
type mismatch; found : scala.concurrent.Future[scala.concurrent.Future[play.api.mvc.Result]] required: play.api.mvc.Result
def index = Action.async { request =>
val f1 = Future {1}
f1.map {
access => if (access==1) {
val f2 = Future {2}
f2.map { // <-- compilation error
result => {
val json = JsObject(Seq(
"acc" -> JsNumber(access),
"ret" -> JsString("0")
))
Ok(json)
}
}
}
else {
val json = JsObject(Seq(
"acc" -> JsNumber(0),
"ret" -> JsString("0")
))
Future.successful(Ok(json))
}
}
}
你基本上在那里 - 只是 f1 上的 flatMap 而不是地图,因为你正在创造另一个未来。