【问题标题】:Nested futures in Play for Scala does not compilePlay for Scala 中的嵌套期货无法编译
【发布时间】:2017-04-08 23:21:03
【问题描述】:

Play for Scala 中的这个Action.async 方法只有在第一个future 返回1 时才应该执行第二个future,这就是它们嵌套的原因。如果第一个未来返回的结果与1 不同,则永远不应执行第二个未来。但我在f2.map 中收到以下编译错误。为什么会出现此错误以及如何解决?

类型不匹配;成立 : scala.concurrent.Future[scala.concurrent.Future[play.api.mvc.Result]] 必需: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))

      }
    }
  }

【问题讨论】:

    标签: scala playframework playframework-2.5


    【解决方案1】:

    你基本上就在那里 - 只是 f1 上的 flatMap 而不是 map,因为你正在创造另一个未来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2013-08-14
      • 2019-04-11
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 2018-02-16
      相关资源
      最近更新 更多