5

我正在使用播放框架来实现 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));

    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);  
        }
    }
4

1 回答 1

5

没有办法非阻塞/非轮询将任意 jucFuture 转换为异步 Future/Promise。试试看,自己看看:)

于 2013-08-14T11:28:29.987 回答