ChunkedResult.chunks is effectively an enumerator (an enumerator is basically a function that accepts an iteratee).  In future we will change it to be just an enumerator, the problem is now since it returns Unit, we can't   I think you can have an implementation that looks like this:

   def enumChunks[A](result: play.mvc.Result, it: Iteratee[Array[Byte], A]): Future[A] = result.getWrappedResult match {
      case AsyncResult(future) => future.flatMap(r => enumChunks(new ResultWrapper(r), it))
      case r @ ChunkedResult(_, chunks) => {
        val promise = scala.concurrent.Promise[A]
        it.mapDone(a => promise.success(a))
        chunks(it)
        promise.future
      }
    }