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 而不是地图,因为你正在创造另一个未来。