Saya sedang mencari cara untuk mengonversi daftar panjang Kontrak Berjangka yang berubah-ubah menjadi Daftar Masa Depan. Saya menggunakan Playframework, jadi pada akhirnya, yang benar-benar saya inginkan adalah a Future[Result]
, tetapi untuk mempermudah, anggap saja Future[List[Int]]
Cara normal untuk melakukan ini adalah dengan menggunakan Future.sequence(...)
tetapi ada twist ... Daftar yang saya berikan biasanya memiliki sekitar 10-20 masa depan di dalamnya, dan tidak jarang salah satu masa depan tersebut gagal (mereka membuat permintaan layanan web eksternal). Alih-alih harus mencoba semuanya jika salah satunya gagal, saya ingin mendapatkan yang berhasil dan mengembalikannya.
Misalnya, melakukan hal berikut tidak berhasil
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
Alih-alih mendapatkan satu-satunya pengecualian, saya ingin dapat menarik 1 dan 3 keluar dari sana. Saya mencoba menggunakanFuture.fold
, tetapi ternyata itu hanya panggilanFuture.sequence
belakang layar.
Terima kasih sebelumnya atas bantuannya!
.recover
memang bagian yang hilang untukku.