【发布时间】:2020-02-27 16:14:30
【问题描述】:
我阅读了 play async action 的 official doc 并了解 Action.async 是
只是一种简化基于返回 Future 的 API 创建操作的工具。
我担心的是,如果你盲目地返回 Future[Response],它似乎会引入未处理的错误,因为 Future 可能是失败。
当然,您可以通过类似的方式处理失败案例
def index = Action.async {
intensiveComputation()
.map { i => Ok("Got result: " + i) }
.recover { case e: Exception => InternalServerError("error")}
}
但是您也可以通过编写类似这样的内容来使用 Action,并且始终如一地使用 Action 而不是 Action.async,您不会忘记处理错误情况。
def index = Action {
intensiveComputation().onComplete {
case Success(i) => Ok("Got result: " + i)
case Failure(e) => InternalServerError("error")
}
}
所以如果我不想引入意外错误,总是使用 Action.apply 是个好习惯吗?还是我错过了什么?
【问题讨论】:
标签: scala playframework future