zip
‚s docs klar sagen, dass es Fehler von this
über die von that
(Hervorhebung von mir) bevorzugt:
def zip[U](that: Future[U]): Future[(T, U)]
Zips die Werte von this
und that
Zukunft und schafft eine neue Zukunft hält das Tupel ihre Ergebnisse.
Wenn this
Zukunft fehlschlägt, ist die resultierende Zukunft mit der werfen in this
gespeicherten fehlgeschlagen. Sonst, wenn that
Zukunft fehlschlägt, ist die resultierende Zukunft mit dem in that
gespeicherten Throwable gescheitert.
Sie könnten Ihre eigene Funktion zu kombinieren zwei Futures in Future[(Try[T], Try[U])]
, wie implementieren:
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)
}
(ich habe nicht getestet, aber Sie bekommen die Idee)
Können Sie fügen sich erholen zu beiden 'Future''s vor dem Zippen? –
Ich zeige ein vereinfachtes Beispiel. Das habe ich tatsächlich gemacht, aber die Sache ist, dass ich die Ausnahmen aller fehlgeschlagenen Futures kombinieren möchte. – vicaba