第 3 章 Eclipse Vert.x 4 中的变化
本节介绍 Eclipse Vert.x 4 和 3.x 版本之间的基本区别。
3.1. 对异步操作使用将来的方法
Eclipse Vert.x 4 使用将来的异步操作。每个回调方法都有对应的未来方法。将来可用于编写异步操作。您可以使用回调和将来的方法组合将基于回调的应用程序迁移到 Eclipse Vert.x 4。但是,您还可以继续使用回调进行异步操作。
以下示例演示了如何将回调用于 Eclipse Vert.x 3.x 版本的异步操作。
WebClient client = WebClient.create(vertx); HttpRequest request = client.get("/resource"); request.send(ar -> { if (ar.succeeded()) { HttpResponse response = ar.result(); } else { Throwable error = ar.cause(); } });
以下示例演示了如何将回调和将来的方法一起用于 Eclipse Vert.x 4 中的异步操作。
WebClient client = WebClient.create(vertx); HttpRequest request = client.get("/resource"); Future<HttpResponse> response = request.send(); response.onComplete(ar -> { if (ar.succeeded()) { HttpResponse response = ar.result(); } else { Throwable failure = ar.cause(); } });
错误处理对于未来的更好是更佳的。在回调中,您必须在组成的每个阶段处理故障,而在将来您可以在结束时处理故障。在基本应用程序中,您可能不会注意到使用回调和将来的不同。
以下示例演示了如何使用回调来编写两个异步操作。您可以看到错误在每个位置进行处理。
client.get("/resource1").send(ar1 -> { if (ar1.succeeded()) { HttpResponse response = ar.result(); JsonObject json = response.body(); client.put("/resource2").sendJsonObject(ar2 -> { if (ar2.succeeded()) { // Handle final result } else { Throwable failure2 = ar.cause(); } }); } else { Throwable failure1 = ar.cause(); } });
以下示例演示了如何使用回调和将来在 Eclipse Vert.x 4 中编写两个异步操作。这个错误仅在末尾处理一次。
Future<HttpResponse> fut1 = client.get("/resource1").send(); Future<HttpResponse> fut2 = fut1.compose(response -> client.put("/resource2").sendJsonObject(response.body())); fut2.onComplete(ar -> { if (ar.succeeded()) { // Handle final result } else { Throwable failure = ar.cause(); } });