你能帮我写一下更好的方法吗:
Future {
Thread sleep 200
5
} onComplete{
case Success(e) => Future {
doSomething(e)
Thread sleep 200
6
} onComplete {
case Success(e) =>
Future {
doSomething(e)
Thread sleep 200
} onComplete {
case Success(_) => println("finished")
case Failure(e) => e.printStackTrace()
}
case Failure(e) => e.printStackTrace()
}
case Failure(e) => e.printStackTrace()
}
现在代码看起来很糟糕,如果我以这种方式添加更多的期货,它会变得更糟......这显然是一个显示问题的例子,所以我希望提到更广泛的背景 .
@update 如果不够清楚,我会尽力澄清 . 我有三个期货,并希望执行第一个,当它完成执行第二个,当它完成 - 第三个 . 第二个未来使用第一个的结果,第三个使用第二个的结果 . 如果期货之一失败,则打印堆栈跟踪并且调用序列中断 . 这就是我想在上面的代码中展示的内容,如果可能的话,我希望以更好的,非嵌套的方式实现它 .
@update 2 如果我能分别处理每个未来的失败,那也会很棒
1 回答
与收藏品非常相似,你可以将它们组合起来(scaladoc):
map生成结果,而flatMap生成Future实例 .
或者你也可以使用for-comprehension,它只是(平面) Map 调用的语法糖 .