[英]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.