【发布时间】:2013-03-24 10:31:50
【问题描述】:
Future 对象的 traverse 方法在第一次失败时停止。我想要这个方法的宽容/宽容版本,在发生错误时继续执行序列的其余部分。
目前我们在 utils 中添加了以下方法:
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
}
有没有更好的方法来做到这一点?
【问题讨论】:
标签: scala concurrency future