私はスカラで先物をする方法を単純化しようとしてきました。私はある時点でFuture[Option[Future[Option[Boolean]]
を手に入れましたが、私はそれを以下でさらに簡略化しました。これを簡略化する良い方法はありますか?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!!"
})
エラーロジックが過度に複雑になっているという印象があります。このスニペットの失敗を処理するには、未解決の先物、オプション、ブーリアンの3つの方法があります。この状況を最初のステップとして簡素化することをお勧めします。異なる失敗を優先的なフォームに変換することができます(たとえば、今後の失敗した結果のみに固執するなど)。 –