在我当前的项目中,vert.x与rxjava一起使用,我不明白为什么?rxjava除了提供vert.x之外还提供了什么呢。有这个,但它不能回答我的问题。
snz8szmq1#
核心vert.xapi使用回调来处理异步操作,这可能很难组合(链接在一起)。例如,使用回调按顺序部署一组verticle如下所示:
vertx.deployVerticle(MyClass1.class.getCanonicalName(), result1 -> { if (result2.succeeded()) { vertx.deployVerticle(MyClass2.class.getCanonicalName(), result2 -> { if (result2.suceeded()) { vertx.deployVerticle(MyClass3.class.getCanonicalName(), result3 -> { if (result3.succeeded()) { System.out.println("Deployed the verticles"); } else { System.err.println("Failed to deploy verticle " + result3.cause()); } }); } else { System.err.println("Failed to deploy verticle " + result2.cause()); } }); } else { System.out.println("Failed to deploy verticle " + result1.cause()); } );
使用rxified vert.x api的等效代码如下:
vertx.rxDeployVerticle(MyClass1.class.getCanonicalName()) .flatMap(ign -> vertx.rxDeployVerticle(MyClass2.class.getCanonicalName())) .flatMap(ign -> vertx.rxDeployVerticle(MyClass3.class.getCanonicalName())) .subscribe( ign -> System.out.println("Deployed the verticles"), err -> System.err.println("Failed to deploy verticle " + err) );
rxjava使编写这样的异步操作变得更加容易。诚然,这个例子有点做作(您肯定可以清理回调版本以提高可读性),但它让您了解了用rxjava链接操作是多么简单。rxjava有一组非常丰富的用于组合和转换异步操作的操作符,它允许您用很少的代码来表达复杂的逻辑。用core vert.xapi是不可能做到这一点的。vert.X4.0将在core vert.x中添加一个基于未来的api,这将减少rxjava对更简单工作流的需求(如上面的示例),但更复杂的流仍将从中受益。
1条答案
按热度按时间snz8szmq1#
核心vert.xapi使用回调来处理异步操作,这可能很难组合(链接在一起)。例如,使用回调按顺序部署一组verticle如下所示:
使用rxified vert.x api的等效代码如下:
rxjava使编写这样的异步操作变得更加容易。诚然,这个例子有点做作(您肯定可以清理回调版本以提高可读性),但它让您了解了用rxjava链接操作是多么简单。rxjava有一组非常丰富的用于组合和转换异步操作的操作符,它允许您用很少的代码来表达复杂的逻辑。用core vert.xapi是不可能做到这一点的。
vert.X4.0将在core vert.x中添加一个基于未来的api,这将减少rxjava对更简单工作流的需求(如上面的示例),但更复杂的流仍将从中受益。