Метод traverse
объекта Future
останавливается при первом сбое. Я хочу толерантную/прощающую версию этого метода, которая при возникновении ошибок продолжается с остальной частью последовательности.
В настоящее время мы добавили следующий метод к нашим утилитам:
def traverseFilteringErrors[A, B <: AnyRef]
(seq: Seq[A])
(f: A => Future[B]): Future[Seq[B]] = {
val sentinelValue = null.asInstanceOf[B]
val allResults = Future.traverse(seq) { x =>
f(x) recover { case _ => sentinelValue }
}
val successfulResults = allResults map { result =>
result.filterNot(_ == sentinelValue)
}
successfulResults
}
Есть ли лучший способ сделать это?