首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带RxJava的Vert.x

带RxJava的Vert.x
EN

Stack Overflow用户
提问于 2020-08-21 21:01:58
回答 1查看 262关注 0票数 1

在我当前的项目中,Vert.x与RxJava一起使用,我不明白为什么?

在Vert.x提供的基础上,RxJava提供了什么。

,但它没有回答我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-22 00:02:21

核心Vert.xAPI使用回调来处理异步操作,这些操作很难组合(链在一起)。例如,使用回调按顺序部署一组Verticles如下所示:

代码语言:javascript
复制
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());
  }
);

使用RxizedVert.xAPI的等效代码如下:

代码语言:javascript
复制
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有一组非常丰富的操作符,用于组合和转换异步操作,这允许您用很少的代码来表示复杂的逻辑。使用核心Vert.xAPI是不可能做到这一点的。

Vert.x4.0将在核心Vert.x中添加一个基于未来的API,这将减少对RxJava对更简单工作流的需求(如上面的例子),但更复杂的流仍将从中受益。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63530012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档