Ho cercato di semplificare il modo in cui faccio i futures in Scala. Ho ottenuto ad un punto un Future[Option[Future[Option[Boolean]]
ma l'ho semplificato più sotto. C'è un modo migliore per semplificare questo?Futuro [Opzione [Futuro [Opzione [Booleano]] Semplificando Futures e Opzioni?
Passare un futuro di "fallito" non corrisponde a come il modo migliore per farlo. nel mondo sequenziale ho semplicemente restituito "FAIL !!" ogni volta falliva piuttosto che continuare fino alla fine. Ci sono altri modi?
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!!"
})
Ho l'impressione che la logica degli errori sia diventata eccessivamente complicata. Ci sono 3 possibili modi per gestire i fallimenti in questo frammento: futures, opzioni, booleans falliti. Suggerirei di semplificare questa situazione come primo passo, magari convertendo diversi fallimenti in una forma preferita (ad esempio, solo attenersi a futuri risultati non riusciti). –