提问者:小点点

我怎样才能把未来的未来变成一个未来的物体?


环境:Akka 2.1,scala版本2.10。M6,JDK 1.7,u5

现在是我的问题:我有:

future1 = Futures.future(new Callable<Future<object>>(){...});
future2 = ? extends Object;
Future.sequence(future1, future2).onComplete(...)

现在在第一行中,我有一个对象的未来,有没有办法在不阻塞当前线程的情况下将其转换为未来?

akka有什么方法吗?据我所知,我还没有找到...第一次发帖....抱歉,格式和组织不正确...:~P


共3个答案

匿名用户

简答(英文):flatMap dat sh!t

简短的回答(Scala):

flatMap(identity)

最短的答案:(Scala 2.12):

flatten

长答案(爪哇):

flatMap(new Mapper<Future<X>>,Future<X>>() {
  @Override public Future<X> apply(final Future<X> f) { return f; }
})

匿名用户

注意:自从Viktor Klang在2012年回答以来,他最近(2016年3月)在他的博客中为scala 2.12添加了:

您是我们中的一员已经厌倦了旧的flatMap(身份)样板来取消嵌套的未来,例如:

val future: Future[Future[X]] = ???
val flattenedFuture /*: Future[X] */ = future.flatMap(identity)

那我有好消息告诉你!从Scala 2.12开始< br > < code > Scala . concurrent . future 将有一个flatten-method,其签名如下:

def flatten[S](implicit ev: T <:< Future[S]): Future[S]

允许你写:

val future: Future[Future[X]] = ???
val flattenedFuture /*: Future[X] */ = future.flatten

匿名用户

您可以创建其他任务

Futures.future(new Runnable(){
     // wait for future1
     // wait for future2
     // do something with the results.
});

或合并任务

Futures.future(new Runnable(){
     // do the work future2 would have done.
     // wait for future1
     // do something with the results.
});

相关问题