2016-04-06 9 views
1

未来のリストを与えられたすべてのエラーを非同期的にキャッチすることは可能ですか?一連の先物によるスキャラキャッチスクロール

私のようなものを考えていた:

Future { throw Exception } zip Future { throw Exception } recover ... 

しかし、私は唯一の回復部分でのThrowableを受けます。何か案が?

+1

(私はこれをテストしていませんが、あなたのアイデアを得る)

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

両者を圧縮する前に「未来」の両方に? –

+0

私は簡単な例を示しています。それは私が実際に行ったことですが、問題は、失敗したすべての先物が投げた例外を結合したいということです。 – vicaba

答えて

2

zipdocsは明らかに(私の強調)、それはthatからのものよりthisからエラーを好むと言う:

def zip[U](that: Future[U]): Future[(T, U)]ジッパーthisthat将来の値のタプルを保持する新しい未来を作成します彼らの 結果。

将来的にthisに失敗した場合、 スローテーブルがthisに格納されていると、結果として失敗します。 もしそうでなければ、将来thatが失敗すると、 は将来発生し、thatに格納されたスローされた値で失敗します。

あなたは次のように、Future[(Try[T], Try[U])]に2つの先物を組み合わせて、独自の機能を実装することができます:あなたが回復追加でき

関連する問題