从java.util.concurrent.Future <T>到play.libs.F.Promise <T>:如何在Java中做到这一点?

le-*_*ude 5 java asynchronous akka playframework

我正在使用play框架来实现REST API服务.

在一个函数中,我使用java异步库与另一个服务进行通信,它返回一个 java.util.concurrent.Future<T>我映射(使用Guava Futures.transform(~))到一个java.util.concurrent.Future<play.mvc.Result>.

现在,我该怎么做play.libs.F.Promise<Result>才能做到AsyncResult

我发现play.libs.Akka.asPromise(scala.concurrent.Future<T> future)但是我找不到一种方法(在Java中)从Java获得scala未来.

编辑临时解决方案:这是我现在正在使用的:

Future<T> future = asyncGetTheFuture();
Promise<T> promise = Akka.future(new JFutureToPromise<T>(tempFuture));
Run Code Online (Sandbox Code Playgroud)

    class JFutureToPromise<T> implements Callable<T> {
        final Future<T> future;
        final long time;
        final TimeUnit unit;

        private JFutureToPromise(Future<T> future, long time, TimeUnit unit) {
            this.future = future;
            this.time = time;
            this.unit = unit;
        }

        private JFutureToPromise(Future<T> future) {
            this(future, 10L, TimeUnit.SECONDS);
        }

        @Override
        public T call() throws Exception {
            return future.get(time, unit);  
        }
    }
Run Code Online (Sandbox Code Playgroud)

Vik*_*ang 5

无法非阻塞地/非轮询地将任意jucFuture转换为异步Future/Promise.试一试,亲眼看看:)