如何使用Play 2.1.1异步请求和期货

时间:2013-06-24 00:17:05

标签: asynchronous playframework-2.0 future

下面的代码无法编译,我不知道如何修复它。

def doAsync(n: Int) = Action {
  import scala.concurrent.ExecutionContext.Implicits.global

  Async {
    val f1 = Future.successful(n)

    f1.map(x => x match {
      case 10 => Ok("first")
      case _ => {
        val f2 = Future.successful(n)
        f2.map(y => Ok("second"))
      }
    })
  }
}

f2.map(y => Ok("second"))行产生编译错误

  

类型不匹配;发现:   scala.concurrent.Future [play.api.mvc.SimpleResult [String]]必需:   play.api.mvc.Result

核心"business logic" is: f2只能运行if n is not 10

1 个答案:

答案 0 :(得分:5)

f1将成为结果的未来。

您将返回案例10的结果,否则返回结果的未来。您需要将结果放在相同的术语中。尝试:

f1 flatMap {x => x match {
  case 10 => Future.successful(Ok("first"))
  case _ => {
    val f2 = Future.successful(n)
    f2.map(y => Ok("second"))
  }
}
相关问题