मैं स्कैला में वायदा करने के तरीके को सरल बनाने की कोशिश कर रहा हूं। मुझे एक बिंदु पर Future[Option[Future[Option[Boolean]]
मिला लेकिन मैंने इसे और नीचे सरल बना दिया है। क्या इसे सरल बनाने का कोई बेहतर तरीका है?भविष्य [विकल्प [भविष्य [विकल्प [बूलियन]] वायदा और विकल्प सरलीकृत करना?
"विफल" का भविष्य पास करने से ऐसा करने का सबसे अच्छा तरीका प्रतीत नहीं होता है। यानी अनुक्रमिक दुनिया में मैं बस "असफल !!" लौटा किसी भी समय यह अंत तक जारी रखने के बजाय विफल रहा। क्या अन्य तरीके हैं?
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 संभावित तरीके हैं: असफल वायदा, विकल्प, बूलियन। मैं इस स्थिति को पहले चरण के रूप में सरल बनाने का सुझाव दूंगा, शायद अलग-अलग विफलताओं को एक पसंदीदा रूप में परिवर्तित कर सकता हूं (उदाहरण के लिए केवल भविष्य में असफल परिणाम)। –