是否可以在给定期货清单的情况下异步捕获所有错误?
我想的是:
Future { throw Exception } zip Future { throw Exception } recover ...
但我只在恢复部分收到一个Throwable。有什么想法吗?
答案 0 :(得分:2)
zip
docs明确表示它更喜欢this
的错误而不是来自that
的错误(我的重点):
def zip[U](that: Future[U]): Future[(T, U)]
压缩this
的值 和that
未来,并创造一个新的未来举行他们的元组 结果如果
中的throwable导致未来失败this
未来失败,则生成的未来将失败 throwable存储在this
中。 否则 ,如果that
未来失败,则为 存储在that
。
您可以实现自己的功能,将两个期货合并为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)
}
(我还没有对此进行过测试,但你明白了这一点)