2017-09-12 4 views
1

Lors de l'utilisation de Vertx eventbus avec un modèle de demande-réponse, je me retrouve avec une gestion des exceptions en double que je voudrais éviter. J'ai le code suivant:Vertx eventbus rx exceptionhandling

void handle(Message<JsonObject> message) { 
    try { 
     // do stuff 
     message.reply(..); 
    } catch (Exception e) { 
     message.fail(..); // in any case reply with fail msg 
    } 
} 

Mais supposons maintenant que nous utilisons un service de javarx comme ceci:

void handle(Message<JsonObject> message) { 
    try { 
     // do some stuff.. 
     service.foo() 
      .subscribe(x -> { 
       message.reply(..); 
      }, t -> { 
       message.fail(..); // how to avoid this duplication?? 
      }); 
    } catch (Exception e) { 
     message.fail(..); // in any case reply with fail msg 
    } 
} 

je dois attraper une exception générale, plus je dois souscrire onError. Dans les deux cas, je veux simplement répondre avec le même message d'échec général. Comment éviter cette duplication?

Répondre

0

répondre à ma propre question depuis que je suis venu avec une solution en enveloppant tout le code dans une structure Rx comme ceci:

void handle(Message<JsonObject> message) { 
    // do some stuff.. 
    Single.just(message) 
     .flatMap(m -> { 
      // so some stuff.. 
      return service.foo(); 
     }) 
     .subscribe(x -> { 
      message.reply(..); 
     }, t -> { 
      message.fail(..); // we get here even if 'do some stuff' part throws runtimeexception 
     }); 
}