2017-12-26 31 views
2

Ich bin auf der Suche nach einer asynchronen Anfrage und dann etwas asynchron, wenn die Antwort empfangen wurde. Bisher ist der Code, den ich habe sieht wie folgt aus:Java 9 HttpClient: Async-Antwort richtig behandeln

httpClient.sendAsync(request, HttpResponse.BodyHandler.asString()) 
      .thenRunAsync(() -> {}); 

Aber ich bin nicht ganz davon überzeugt, dass die Runnable läuft, sobald die Anforderung abgeschlossen hat. Ist diese Annahme richtig? Wenn ja, was sollte ich verwenden, um die Antwort richtig zu verarbeiten, sobald sie empfangen wurde?

+1

Ihre Annahme ist größtenteils korrekt: Wenn die HTTP-Anfrage erfolgreich abgeschlossen wird (Antwortcode weniger als 400), wird Ihr Runnable ausgeführt. Andernfalls wird CompleableFuture ausnahmsweise abgeschlossen, und Sie können mit [ausnahmsweise] (https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/CompletionStage.html#exceptional-java.util) umgehen .Function.Function-) Methode. – VGR

+0

Danke @VGR. Wenn du eine Antwort schreiben willst, werde ich es akzeptieren! –

Antwort

2

Ihre Annahme ist größtenteils richtig: Wenn die HTTP-Anfrage erfolgreich abgeschlossen wird (Antwortcode weniger als 400), wird Ihr Runnable ausgeführt. Andernfalls wird CompleableFuture in Ausnahmefällen abgeschlossen, was Sie mit der Methode exceptionally bearbeiten können.