Я пытался упростить то, как я делаю фьючерсы в Scala. В какой-то момент я получил 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!!"
})
У меня создалось впечатление, что ваша логика ошибок стала чрезмерно сложной. Существует три возможных способа устранения сбоев в этом фрагменте: неудачные фьючерсы, опции, логические значения. Я бы предложил упростить эту ситуацию в качестве первого шага, возможно, превратив различные сбои в предпочтительную форму (например, только придерживаться будущих неудачных результатов). –