2016-05-31 15 views

Antwort

1

Es wird ein paar Mal tief in der Implementierung für Promise in der Standardbibliothek aufgerufen. Siehe source.

try onComplete(value) catch { case NonFatal(e) => executor reportFailure e } 

Ein ExecutionContext kann reportFailure implementieren, beliebigen Code auszuführen, wenn eine Zukunft/Versprechen versagt. Die einzige Methode in der Standardbibliothek, die diese Methode implementiert, ist ExecutionContextImpl, die nicht in der öffentlichen API enthalten ist, aber here gefunden wurde. Diese Klasse akzeptiert eine reporter: Throwable => Unit-Funktion. Die Standardeinstellung ExecutionContext.Implicits.global verwendet ExecutionContext.defaultReporter, die den Stack-Trace einfach auf System.err druckt. Wenn Sie das Verhalten anpassen möchten, müssen Sie möglicherweise Ihre eigenen ExecutionContext definieren. Es ist schwierig, sich ein Szenario vorzustellen, in dem Sie einen anderen Nebeneffekt erzielen möchten, als den Stack-Trace zu protokollieren oder eine andere Art der Protokollierung.

1

Diese Methode meldet Ausnahmen, die nicht anderweitig gemeldet werden können.

Es wird aufgerufen, wenn während der Ausführung eines Callbacks eine Ausnahme auftritt, die keine andere Möglichkeit hat, einen Fehler zu melden. Insbesondere geben Aufrufe an Future.onComplete (z. B. über Future.foreach) Unit zurück und können in einem beliebigen Thread ausgeführt werden, sodass sie keine Möglichkeit haben, ihren Aufrufern einen Fehler zu melden. Wenn eine Ausnahme innerhalb von onComplete ausgelöst wird, wird sie an diese Methode gesendet.

Verwandte Themen