私は、Scala で先物を処理する方法を単純化しようとしてきました。ある時点で a を得ましたFuture[Option[Future[Option[Boolean]]
が、以下でさらに単純化しました。これを単純化するより良い方法はありますか?
「失敗」の未来を渡すことは、これを行うための最良の方法とは思えません。つまり、シーケンシャルの世界では、単に「FAIL!!」を返しました。最後まで続けるのではなく、失敗したときはいつでも。他の方法はありますか?
val doSimpleWork = Future {
//Do any arbitrary work (can be a different function)
true //or false
}
val doComplexWork = Future {
//Do any arbitrary work (can be a different function)
Some("result") //or false
}
val failed = Future {
//Do no work at all!!! Just return
false
}
val fut1 = doSimpleWork
val fut2 = doSimpleWork
val fut3 = (fut1 zip fut2).map({
case (true, true) => true
case _ => false
})
val fut4 = fut3.flatMap({
case true =>
doComplexWork.flatMap({
case Some("result") =>
doSimpleWork
case None =>
failed
})
case false =>
failed
})
fut4.map({
case true =>
"SUCCESS!!!"
case _ =>
"FAIL!!"
})