ps0*_*604 3 scala playframework
在下面的代码中,我必须返回在另一个未来之后调用的未来的结果。我future2.map在行中收到以下错误:
类型不匹配; 找到:scala.concurrent.Future[play.api.mvc.Result] 需要:play.api.mvc.Result
如何使这项工作?
def method1 = Action.async { request =>
val future1 = f1
future1.map { result1 =>
val future2 = f2
future2.map { result2 =>
Ok(result1+result2+"")
}
}
}
def f1 = Future { 1 }
def f2 = Future { 2 }
Run Code Online (Sandbox Code Playgroud)
您可以通过多种方式做到这一点。但首先,你需要了解如何map与flatMap工作有Future:
def map[S](f: (T) ? S): Future[S]
def map[S](f: (T) ? Future[S]): Future[Future[S]]
def flatMap[S](f: (T) ? Future[S]): Future[S]
Run Code Online (Sandbox Code Playgroud)
请注意,在上述签名中,您正在使用ie或的值调用map和。flatMapalready is a futureFuture[<some-value>].map(...)Future[<some-value>].flatMap(...)
方法一:
def method1 = Action.async { request =>
val future1 = f1
future1.flatMap { result1 => //replaced map with flatMap
val future2 = f2
future2.map { result2 =>
Ok(result1+result2+"")
}
}
}
def f1 = Future { 1 }
def f2 = Future { 2 }
Run Code Online (Sandbox Code Playgroud)
方法二:
def method1 = Action.async { request =>
val future1 = f1
future1.flatMap { result1 => //replaced map with flatMap
val future2 = f2
future2.flatMap { result2 => //replaced map with flatMap
Future.successful{Ok(result1+result2+"")} // used Future.successful{} to generate a Future of Result
}
}
}
def f1 = Future { 1 }
def f2 = Future { 2 }
Run Code Online (Sandbox Code Playgroud)