我正在使用Play并采取行动,我想做两件事: -
由于WS API返回private
,我正在使用Future
我的Redis缓存模块也返回Action.async
。
假设我正在为可能长时间运行的任务正确使用另一个ExecutionContext。
Q值。通过执行以下操作,有人可以确认我是否在正确的轨道上。我知道我没有照顾下面的例外案例 - 只是为了简洁而保持简单。
Future
我担心的是,这可能不是最有效的做事方式,因为我假设不同的线程可以处理完成每个期货的任务。
非常感谢任何有关更好方法的建议。
答案 0 :(得分:3)
这不是Play特有的。我建议您查看解释Future
如何工作的文档。
val x: Future[FutureOp2ResType] = futureOp1(???).flatMap { res1 => futureOp2(res1, ???) }
或者为了理解
val x: Future[TypeOfRes] = for {
res1 <- futureOp1(???)
res2 <- futureOp2(res1, ???)
// ...
} yield res
至于如何执行Future
(使用线程),它取决于你使用的ExecutionContext
(例如全局的,Play Play,......)。
WS.get
返回Future
,不应在cacheFuture.map
内调用,也不会返回Future[Future[...]]
。