আমি ফিউচারের একটি স্বেচ্ছাসেবী দৈর্ঘ্যের তালিকাকে ভবিষ্যতের তালিকায় রূপান্তর করার জন্য একটি উপায় খুঁজছি। আমি প্লেফ্রেমওয়ার্ক ব্যবহার করছি, সুতরাং শেষ অবধি, আমি যা চাই তা হ'ল একটি Future[Result]
, তবে বিষয়গুলিকে সহজ করে তুলতে, আসুন আমরা বলি এটি Future[List[Int]]
করার সাধারণ উপায়টি ব্যবহার করা হবে Future.sequence(...)
তবে একটি বাঁক আছে ... আমি যে তালিকাটি সাধারণত দেওয়া হয় তা হ'ল এতে প্রায় ১০-২০ ফিউচার থাকে এবং এই ফিউচারগুলির একটিরও ব্যর্থ হওয়া অস্বাভাবিক নয় (তারা বাহ্যিক ওয়েব পরিষেবাদির জন্য অনুরোধ করছে)। তাদের মধ্যে যে কোনও একটি ব্যর্থ হয় সেই ইভেন্টে তাদের সবার সাথে আবার চেষ্টা করার পরিবর্তে, আমি সফল হয়ে ওঠে এবং সেগুলি ফিরে পেতে সক্ষম হতে চাই।
উদাহরণস্বরূপ, নিম্নলিখিত কাজগুলি কাজ করে না
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
সত্যিই আমার জন্য অনুপস্থিত টুকরা ছিল।