ฉันกำลังมองหาวิธีแปลงรายการ Futures ที่มีความยาวโดยพลการเป็น Future of List ฉันใช้ Playframework ในที่สุดสิ่งที่ฉันต้องการจริงๆคือ a 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
เป็นชิ้นส่วนที่ขาดหายไปสำหรับฉัน