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 } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |