一个动作返回Future [Result],而另一个返回Accumultor []

问题描述

我创建了以下两个Actions

def action1: Action[Either[MaxSizeExceeded,AnyContent]] = silhouette.SecuredAction.async(parse.maxLength(maxAllowedBodySize,parse.anyContent)(materializer)) { ...}


def action2:Action[AnyContent] = silhouette.UserAwareAction.async { ...}

在对它们进行单元测试时,我发现action1返回的结果是Future[Result],而action2的返回结果是Accumulator[ByteString,Result]

val response:Accumulator[ByteString,Result] = testEnv.controller.action1(request)

val response:Future[Result] = userTestEnv.controller.action2(request)

我不太清楚为什么会有区别吗?为什么返回类型不同?

解决方法

我认为原因是对于类型为[Either [MaxSizeExceeded,AnyContent]]的ActionAction返回Accumulator-https://www.playframework.com/documentation/2.6.x/ScalaEssentialAction

通常来说,如果Play知道主体可以容纳在内存中,那么它将返回Future[Result],否则返回Accumulator