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.