繁体   English   中英

Play for Scala中的future.recover无法编译

[英]future.recover in Play for Scala does not compile

我在future recover行中收到以下编译错误:

类型不匹配; 发现:scala.concurrent.Future [Any] required:scala.concurrent.Future [play.api.mvc.Result]

我正在返回Ok()这是一个Result对象,为什么编译器会抱怨?

class Test2 extends Controller  {

  def test2 = Action.async { request =>

          val future = Future { 2 }

          println(1)

          future.map { result => {
             println(2)
             Ok("Finished OK")
           }
          }

         future.recover { case _ => {    // <-- this line throws an error
               println(3)
               Ok("Failed")
           }
         }

    }
 }

如果仔细查看Future.recover方法,您会看到部分函数应该具有future类型的子类型,在您的情况下为Int,因为您将recover应用于原始的Future'western'。 要修复它,您应该将其应用于映射:

future.map {
  result => {
    println(2)
    Ok("Finished OK")
  }
}.recover { 
  case _ => {    
    println(3)
    Ok("Failed")
  }
}

你忘了链,所以像Nyavro写的那样,或者,如果你喜欢另一种风格,那么只需引入一个中间变量。

def test2 = Action.async { request =>

  val future = Future { 2 }

  println(1)

  val futureResult = future.map { result => {
    println(2) 
    Ok("Finished OK")
  }}

  futureResult.recover { case _ => {    
    println(3)
    Ok("Failed")
  }}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM