Scala 捕获一系列期货引发的错误
Posted
技术标签:
【中文标题】Scala 捕获一系列期货引发的错误【英文标题】:Scala catch thrown errors by a sequence of futures 【发布时间】:2016-07-27 03:00:27 【问题描述】:是否可以在给定期货列表的情况下异步捕获所有错误?
我在想这样的事情:
Future throw Exception zip Future throw Exception recover ...
但我只在恢复部分收到一个 Throwable。有什么想法吗?
【问题讨论】:
你能在压缩它们之前为Future
添加恢复吗?
我正在展示一个简化的示例。这就是我实际所做的,但问题是我想结合所有失败的期货抛出的异常。
【参考方案1】:
zip
的docs 明确表示它更喜欢来自this
的错误而不是来自that
的错误(我的重点):
def zip[U](that: Future[U]): Future[(T, U)]
压缩this
的值 和that
未来,并创建一个新的未来持有他们的元组 结果。如果
this
未来失败,则生成的未来将失败,并 throwable 存储在this
中。 否则,如果that
未来失败,则 生成的 future 因存储在that
中的 throwable 而失败。
您可以实现自己的函数将两个期货组合成Future[(Try[T], Try[U])]
,例如:
def zipToTry[T,U](a: Future[T], b: Future[U])
(implicit executor: ExecutionContext)
: Future[(Try[T], Try[U])] =
val t: Try[T] = a.map Success(_) .recover Failure(_)
val u: Try[U] = b.map Success(_) .recover Failure(_)
t.zip(u)
(我还没有测试过,但你明白了)
【讨论】:
以上是关于Scala 捕获一系列期货引发的错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XMLHttpRequest 捕获无效 URL 引发的错误