第 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();
}
});