所以我经常发现自己编写了这个辅助函数,最后厌倦了它并决定询问它。我想要的功能是根据异常"抛出"将失败的Future映射到另一个失败的Future。
Future是否具有此功能,而我还没有找到它?
object FutureUtils {
implicit class FutureWrapper[T](val fut: Future[T]) extends AnyVal {
def mapFailure(f: PartialFunction[Throwable, Throwable])(implicit ec: ExecutionContext) = {
val p = Promise[T]()
fut onComplete {
case Success(a) ⇒ p success a
case Failure(e) ⇒ p failure f.applyOrElse(e, (t: Throwable) ⇒ t)
}
p.future
}
}
}