मैं फ्यूचर्स की एक मनमानी लंबाई सूची को भविष्य की सूची में बदलने का एक रास्ता खोज रहा हूं। मैं Playframework का उपयोग कर रहा हूं, इसलिए आखिरकार, जो मैं वास्तव में चाहता हूं वह एक है Future[Result]
, लेकिन चीजों को सरल बनाने के लिए, आइए हम कहते हैं कि Future[List[Int]]
ऐसा करने का सामान्य तरीका उपयोग करना होगा, Future.sequence(...)
लेकिन एक मोड़ है ... मुझे जो सूची दी गई है वह आमतौर पर है इसमें लगभग 10-20 वायदा है, और उन वायदाओं में से एक को विफल करने के लिए यह असामान्य नहीं है (वे बाहरी वेब सेवा अनुरोध कर रहे हैं)। इस घटना में उन सभी को पुन: प्रयास करने के बजाय, जिनमें से एक विफल हो जाता है, मैं उन लोगों को प्राप्त करने में सक्षम होना चाहता हूं जो सफल हुए और उन वापस लौटे।
उदाहरण के लिए, निम्न कार्य करने से काम नहीं चलता है
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.Success
import scala.util.Failure
val listOfFutures = Future.successful(1) :: Future.failed(new Exception("Failure")) ::
Future.successful(3) :: Nil
val futureOfList = Future.sequence(listOfFutures)
futureOfList onComplete {
case Success(x) => println("Success!!! " + x)
case Failure(ex) => println("Failed !!! " + ex)
}
scala> Failed !!! java.lang.Exception: Failure
केवल एकमात्र अपवाद प्राप्त करने के बजाय, मैं वहां से 1 और 3 को खींचने में सक्षम होना चाहूंगा। मैंने उपयोग करने की कोशिश की Future.fold
, लेकिन यह स्पष्ट रूप से सिर्फ Future.sequence
पर्दे के पीछे है।
मदद के लिए अग्रिम धन्यवाद!
.recover
वास्तव में मेरे लिए लापता टुकड़ा था।