gpt4 book ai didi

playframework - 处理失败的 future

转载 作者:行者123 更新时间:2023-12-05 01:03:36 26 4
gpt4 key购买 nike

在 Play Framework 2.3 中,一个 Action 可以从成功的 future 调用中产生一个结果,如下所示:

def index = Action.async {
val futureInt = scala.concurrent.Future { intensiveComputation() }
futureInt.map(i => Ok("Got result: " + i))
}

但是一个 Action 如何处理失败的 future 调用,即通过调用 failure() 完成的 future 而不是 success() ?

例如,一个 Action 如何产生 InternalServerError结果是在 future 的失败的 throwable 中返回的消息?
onCompleteonFailure回调似乎不适合操作的流程(它需要返回结果,无论是成功的 future 还是失败的 future )。

最佳答案

单个Action ,您可以使用 recover 来执行此操作,恢复失败的 FutureResult :

def index = Action.async {
val futureInt = scala.concurrent.Future { intensiveComputation() }
futureInt.map(i => Ok("Got result: " + i))
.recover{ case e: Exception => InternalServerError(e.getMessage) }
}
recover在这种情况下是 PartialFunction[Throwable, Result] ,因此您可以更精细地处理错误,以及任何未在 PartialFunction 中定义的内容将保持失败 Future .更一般地说,您可能可以使用自定义定义 Action实现这一点。

关于playframework - 处理失败的 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24499336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com