加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 为成功与失败打下基础

发布时间:2020-12-16 09:33:28 所属栏目:安全 来源:网络整理
导读:我有一个未来[T],我想映射结果,成功和失败。 例如,像 val future = ... // Future[T]val mapped = future.mapAll { case Success(a) = "OK" case Failure(e) = "KO"} 如果我使用地图或平面图,它只会映射成功的未来。如果我使用恢复,它只会映射失败的期
我有一个未来[T],我想映射结果,成功和失败。

例如,像

val future = ... // Future[T]
val mapped = future.mapAll { 
  case Success(a) => "OK"
  case Failure(e) => "KO"
}

如果我使用地图或平面图,它只会映射成功的未来。如果我使用恢复,它只会映射失败的期货。 onComplete执行回调,但不返回修改的未来。变换将工作,但是需要2个功能而不是部分功能,所以有点丑陋。

我知道我可以做出一个新的承诺,并通过onComplete或onSuccess / onFailure完成,但我希望有一些我失踪的东西,将允许我用一个PF执行上述操作。

解决方法

AFAIK,你不能直接使用一个PF。和变换变换Throwable =>可耻的,所以这也不会帮助你。最接近你可以开箱即用:

val mapped: Future[String] = future.map(_ => "OK").recover(_ => "KO")

也就是说,实现你的mapAll是微不足道的:

implicit class RichFuture[T](f: Future[T]) {
  def mapAll[U](pf: PartialFunction[Try[T],U]): Future[U] = {
    val p = Promise[U]()
    f.onComplete(r => p.complete(Try(pf(r))))
    p.future
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读