Vert.x 使用 RxJava
Vert.x with RxJava
在我当前的项目中 Vert.x 与 RxJava 一起使用,我不明白为什么?
RxJava 在 Vert.x 提供的基础上提供了什么。
有 this 但它没有回答我的问题。
核心 Vert.x API 使用回调来处理异步操作,这可能很难组合(链接在一起)。例如,使用回调按顺序部署一堆 Verticles 如下所示:
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 有一组非常丰富的运算符用于组合和转换异步操作,这让您可以用很少的代码表达复杂的逻辑。核心 Vert.x API.
无法做到这一点
Vert.x 4.0 将添加一个 Future-based API 到核心 Vert.x,这将减少对 RxJava 的需求以简化工作流程(如上例) ,但更复杂的流程仍将从中受益。
在我当前的项目中 Vert.x 与 RxJava 一起使用,我不明白为什么?
RxJava 在 Vert.x 提供的基础上提供了什么。
有 this 但它没有回答我的问题。
核心 Vert.x API 使用回调来处理异步操作,这可能很难组合(链接在一起)。例如,使用回调按顺序部署一堆 Verticles 如下所示:
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 有一组非常丰富的运算符用于组合和转换异步操作,这让您可以用很少的代码表达复杂的逻辑。核心 Vert.x API.
无法做到这一点Vert.x 4.0 将添加一个 Future-based API 到核心 Vert.x,这将减少对 RxJava 的需求以简化工作流程(如上例) ,但更复杂的流程仍将从中受益。