traverse
Future
से विधि पहली विफलता पर बंद हो जाती है। मैं इस विधि का सहिष्णु/क्षमा करने वाला संस्करण चाहता हूं जो त्रुटियों की घटना के अनुक्रम के साथ चलता है।विफलता के बावजूद भविष्य अनुक्रम निष्पादित करने के लिए कैसे?
वर्तमान में हम हमारे utils के लिए निम्न विधि जोड़ लिया है:
def traverseFilteringErrors[A, B <: AnyRef]
(seq: Seq[A])
(f: A => Future[B]): Future[Seq[B]] = {
val sentinelValue = null.asInstanceOf[B]
val allResults = Future.traverse(seq) { x =>
f(x) recover { case _ => sentinelValue }
}
val successfulResults = allResults map { result =>
result.filterNot(_ == sentinelValue)
}
successfulResults
}
वहाँ यह करने के लिए एक बेहतर तरीका है?
कूल:
दूसरे शब्दों में, आप निम्नानुसार अपने सहायक विधि पुनर्लेखन कर सकते हैं। क्या आप टिप्पणी कर सकते हैं कि वैकल्पिक विकल्प ('f.map (सफलता ... ') कम कुशल है? – sourcedelica
क्योंकि' मानचित्र 'के साथ-साथ' पुनर्प्राप्ति '' वादा' के उदाहरण बनाते हैं और उनके संबंधित 'भविष्य' को वापस करते हैं। यह दो है मेरे वैकल्पिक समाधान के लिए केवल एक के बजाय 'वादा' की प्रशंसाएं। साथ ही, "संक्षिप्त" संस्करण 'प्रयास' उदाहरण को अनदेखा करता है (जिसे 'वादा' उदाहरणों के अंदर संग्रहीत किया जाता है) केवल इसे 'सफलता' या 'विफलता' के रूप में अनावश्यक रूप से पुनर्विचार करने के लिए 'उदाहरण, जो कि अपमानजनक है। बेशक, आपको यह देखने के लिए प्रोफाइल करना होगा कि क्या यह वास्तव में इस तरह का सार्थक अंतर बनाता है। –
धन्यवाद! यह वास्तव में सहायक है। – sourcedelica