Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala.concurrent.Future是否具有此功能?_Scala_Future - Fatal编程技术网

scala.concurrent.Future是否具有此功能?

scala.concurrent.Future是否具有此功能?,scala,future,Scala,Future,所以我经常发现自己在写这个helper函数,最终厌倦了它,决定去问它。我想要的功能是根据异常“抛出”将一个失败的未来映射到另一个失败的未来 Future是否有这个功能,而我还没有找到它 object FutureUtils { implicit class FutureWrapper[T](val fut: Future[T]) extends AnyVal { def mapFailure(f: PartialFunction[Throwable, Throwable])(impl

所以我经常发现自己在写这个helper函数,最终厌倦了它,决定去问它。我想要的功能是根据异常“抛出”将一个失败的未来映射到另一个失败的未来

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
    }
  }
}

您有没有看过《恢复使用》?这并不完全是您所要求的(您必须在
将来包装输出。失败的
),但至少它会简化您的实现。我只是发现我不想恢复,只想更改异常。recoverWith看起来与我想要的最接近。对于未来,这是一个耻辱。失败的包装器,所以我将继续使用我现有的。将异常映射到另一个异常有点奇怪,所以我不认为标准库没有任何可以立即执行的操作是令人惊讶的
recover
recoverWith
都将其简化为一行程序,因此我非常满意它与隐式类的结合。