在游戏行动中嵌套期货

时间:2016-02-25 16:00:02

标签: scala playframework playframework-2.0

我正在使用Play并采取行动,我想做两件事: -

  1. 首先检查我的缓存中的值
  2. 其次,使用值
  3. 调用Web服务

    由于WS API返回private,我正在使用Future 我的Redis缓存模块也返回Action.async

    假设我正在为可能长时间运行的任务正确使用另一个ExecutionContext。

    Q值。通过执行以下操作,有人可以确认我是否在正确的轨道上。我知道我没有照顾下面的例外案例 - 只是为了简洁而保持简单。

    Future

    我担心的是,这可能不是最有效的做事方式,因为我假设不同的线程可以处理完成每个期货的任务。

    非常感谢任何有关更好方法的建议。

1 个答案:

答案 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[...]]