怎样才能让未来的未来成一个未来的目标?(How can I make A future of fut

2019-06-26 21:07发布

ENV:阿卡2.1,斯卡拉版2.10.M6,JDK 1.7,U5

现在是我的问题:我有:

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

现在在第一线,我有对象的未来的前途,有没有办法把它转换成一个未来的同时不阻碍我的当前线程?

是否有任何阿卡方法? 至于我检查,我没有带发现的任何尚未...第一次有一个岗位.... Sry基因的格式错误,并组织...:〜p

Answer 1:

简答题(英文):flatMap DAT SHŧ

更短的答案(斯卡拉):

flatMap(identity)

简短的回答:(斯卡拉2.12):

flatten

长一点的回答(JAVA):

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


Answer 2:

注:由于维克多·巴生的2012 的答案 ,他最近(2016年3月)中加入自己的博客 斯卡拉2.12:

缺少规范的组合子: flatten

你是我们的一个Future谁已经厌倦了旧的-users flatMap(identity)样板用于非嵌套期货如下所示:

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

然后,我对你有一些好消息! 使用Scala 2.12开始
scala.concurrent.Future将有一个扁平化,方法具有以下特征:

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

允许你写:

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


Answer 3:

您可以创建另一个任务

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


文章来源: How can I make A future of future into one future object?