如何在play框架过滤器中使用Promise.timeout

时间:2015-08-28 08:39:16

标签: scala playframework akka

我们想使用Play框架来模拟另一个应用程序。要求是延迟响应,例如5秒。

我想在过滤器中执行此操作,因为它将适用于所有操作。我希望在操作返回后使用play.api.libs.concurrent.Promise.timeout来延迟响应。我是Scala的新手,我真的不知道如何用Scala编写代码,我总是得到一个Future[Future[Result]]对象。

有人可以告诉我应该使用哪种方法以及如何使用?

被修改

我的错误代码有编译错误

nextFilter(requestHeader).map {result=>
  play.api.libs.concurrent.Promise.timeout(result, 5.seconds)
}

1 个答案:

答案 0 :(得分:0)

TL; DR 您可以使用flatMap代替map

您使用Future.map函数合并它们,该函数将A转换为B并返回Future[B],因为在您的情况下Promise.timeout返回Future[Result],最后得到Future[Future[Result]]

我们可以使用flatMap代替map来解决此问题。 Future.flatMap采用将A转换为Future[B]的函数,这正是Promise.timeout的作用,因此您可以使用:

nextFilter(requestHeader).flatMap { result =>
  play.api.libs.concurrent.Promise.timeout(result, 5.seconds)
}