संदेह में, प्रकारों का पालन करें।
onComplete
रिटर्न Unit
, तो यह आपको Future
परिणाम के साथ कुछ करने के लिए अनुमति देता है, लेकिन यह एक मूल्य
flatMap
आप सूची साथ कुछ करना और एक नया Future
वापस लौटने देते नहीं लौटेगा तो flatMap
अधिक शक्तिशाली है क्योंकि यह आपको कई वायदा श्रृंखला, रास्ते में उनके मूल्यों के साथ कुछ करने की अनुमति देता है, और केवल अंत में विफलता के मामले को संभालने की अनुमति देता है। एरिक मीजर के शब्दों का उपयोग करने के लिए: "यह आपको खुश रास्ते के माध्यम से मार्गदर्शन करता है"।
तो उदाहरण के लिए आप
val finalFuture = results
.flatMap(x => /* do something and return a future */)
.flatMap(y => /* do something else and return a future */)
.flatMap(z => /* do something else and return a future */)
.map(myresult => /* do something */)
क्या कर सकते हैं कुछ रास्ते में गलत हो जाता है, चेन जल्दी टूट गया है और आप पहले त्रुटि हुई मिलेगा। और भी बेहतर - - बस Future
वापसी के रूप में यह पहले से ही हैं, इस पर जानकारी शामिल है
यह
val finalFuture = for {
x <- results
y <- /* do something and return a future */
z <- /* do something and return a future */
} yield something(z)
आप विफलता के मामले को संभालने के लिए की जरूरत है, तो आप अब onComplete
उपयोग कर सकते हैं, या एक और भी अच्छे वाक्य रचना के लिए अनुमति देता है async गणना सफल या नहीं।
स्रोत
2014-10-14 10:34:42
यह हस्ताक्षर से स्पष्ट है: इसी प्रकार मोनड का प्रयास करें, 'flatMap' विफलताओं से संबंधित नहीं है। यह मोनैड के बारे में है: आप किसी भी त्रुटि को बरकरार रखते हैं और पाइप में कोई त्रुटि नहीं होने पर ही आपके परिचालनों को लागू करते हैं। केवल अंत में आपको सलाह दी जाती है कि दोनों त्रुटियों और सफलताओं को पकड़ने के लिए –