据我所知,这是因为
leaderboardCreate
实际上不是与
complete
如你所料打电话。这个
完成
方法返回
StandardRoute
延伸自
Route
定义为:
type Route = RequestContext â Future[RouteResult]
换句话说,“路由”是一个从上下文到
Future
(指
RouteResult
)如果你看
完成
定义如下:
def complete(m: â ToResponseMarshallable): StandardRoute =
StandardRoute(_.complete(m))
注意
â
之前
ToResponseMarshallable
. 这是传递参数
by name
这实际上把它变成了一个懒惰的评价。
换句话说,你所有的
try/catch
包装是非常小(且无例外)的代码
标准德鲁特
它将您的逻辑捕获为一个懒惰的值,而不是逻辑本身的执行。这就是为什么你需要
custom ExceptionHandler
您(或者更确切地说,akka)可以将其放入错误处理程序链中,
未来
什么时候开始运行。