में वापस कर दिया गया है यदि भविष्य में एक असफल अपवाद लौटाता है तो मैं कैसे संभाल सकता हूं?जारी रखें जब एक Future.failed (नया अपवाद ("")) स्कैला
परिदृश्य है कि मेरे कोड कॉल getValue()
, verifyValue()
लिए परिणाम नक्शे और उसके बाद मैं इस मामले में जहां getValue का परिणाम() Future.failed(new Exception("message"))
है संभाल करने में सक्षम होना चाहते है। हालांकि जब मैं इसे चलाता हूं, तो getValue() का नतीजा एक असफल भविष्य है, तो यह इसे संभालने के बजाय अपवाद फेंकता है।
क्या किसी के पास कोई सुझाव है कि मैं यह कैसे करूं?
def method(): Future[JsObject] = {
getValue().flatMap(verifyValue(_))
}
def getValue(): Future[JsObject] = {
try {
value1 <- getValue1()
value2 <- getValue2(value1)
} yield {
value2
}
}
def verifyValue(result: Any): Future[JsObject] = {
result match {
case e: Exception =>
getValue()
case json: JsObject => Future.successful(json)
}
}
अद्यतन: मुझे लगता है मैं मूल प्रश्न के साथ इस स्पष्ट कर दिया नहीं लगता है, लेकिन कारण है कि मैं मूल्य flatmap है जिन्हें मैंने स्पष्ट रूप में वायदा में से किसी के लिए प्रतीक्षा करने के लिए नहीं करना चाहते हैं मेरा कोड, और इसलिए मैं मूल्य को हल करने के लिए Future.onComplete {} का उपयोग नहीं करना चाहता हूं।
अद्यतन 2: एक और चीज जो स्पष्ट नहीं हो सकती है कि अगर यह अपवाद फेंकता है, तो मैं एक और विधि कॉल करना चाहता हूं। मैं नहीं चाहता कि यह केवल अपवाद को संभालने के लिए है, यह अपवाद लॉग करने जा रहा है और फिर दूसरी विधि को कॉल करें जिसका रिटर्न वैल्यू getValue() के समान प्रकार का है।
लगता है जैसे आप चाहते हैं http://johnkurkowski.com/posts/accumulating-multiple-failures-in-a-ValidationNEL/ – Yawar
यह आश्चर्यजनक लगता है! – annedroiid
धन्यवाद, लेकिन मैं एक उदार-योग्य उत्तर टाइप करने के लिए बहुत आलसी हूं, और पोस्ट अवधारणाओं को समझाते हुए एक बहुत अच्छा काम करता है :-) – Yawar