Scala: List[Future] to Future[List] disregarding failed futures

前端 未结 6 584
终归单人心
终归单人心 2020-11-29 16:28

I\'m looking for a way to convert an arbitrary length list of Futures to a Future of List. I\'m using Playframework, so ultimately, what I really want is a Future[Resu

6条回答
  •  青春惊慌失措
    2020-11-29 16:53

    You can also collect successful and unsuccessful results in different lists:

    def safeSequence[A](futures: List[Future[A]]): Future[(List[Throwable], List[A])] = {
      futures.foldLeft(Future.successful((List.empty[Throwable], List.empty[A]))) { (flist, future) =>
        flist.flatMap { case (elist, alist) =>
          future
            .map { success => (elist, alist :+ success) }
            .recover { case error: Throwable => (elist :+ error, alist) }
        }
      }
    }
    

提交回复
热议问题