从 CompositeFuture Vertx 获取结果
Get Result from CompositeFuture Vertx
我最近了解了复合期货。我知道我可以有一个 Futures 列表,当它们全部完成时,将调用 compositeFuture 处理程序:
CompositeFuture.all(futures).onComplete(compositeAsync -> {
if (compositeAsync.succeeded()){
Future<CompositeFuture> cf = compositeAsync.result();
} else {
// at least 1 future failed
}
});
我的问题是关于这一行的:Future<CompositeFuture> cf = compositeAsync.result();
我传入 compositeFuture 的期货是 List<Future<Buffer>>
类型,但是 result() returns 期货。我如何从 Future<CompoiteFuture>
中获取 Future<Buffer>
?
我使用以下示例将参数化期货传入 compositeFuture.all(futures);
interface MyCompositeFuture extends CompositeFuture {
// This is what the regular does, just for example
/*
static CompositeFuture all(List<Future> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
*/
static <T> CompositeFuture all(List<Future<T>> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
}
来源:
您应该得到结果,而不是期货本身:
CompositeFuture.all(futures).onComplete(compositeAsync -> {
if (compositeAsync.succeeded()){
CompositeFuture cf = compositeAsync.result();
cf.list().forEach(futureResult -> {
// do something with the result of each future
});
} else {
// at least 1 future failed
}
});
请注意 CompositeFuture extends Future<CompositeFuture>
,这就是您的代码有效的原因。但是在 onComplete
里面你应该直接使用它而不是作为 Future<CompositeFuture>
我最近了解了复合期货。我知道我可以有一个 Futures 列表,当它们全部完成时,将调用 compositeFuture 处理程序:
CompositeFuture.all(futures).onComplete(compositeAsync -> {
if (compositeAsync.succeeded()){
Future<CompositeFuture> cf = compositeAsync.result();
} else {
// at least 1 future failed
}
});
我的问题是关于这一行的:Future<CompositeFuture> cf = compositeAsync.result();
我传入 compositeFuture 的期货是 List<Future<Buffer>>
类型,但是 result() returns 期货。我如何从 Future<CompoiteFuture>
中获取 Future<Buffer>
?
我使用以下示例将参数化期货传入 compositeFuture.all(futures);
interface MyCompositeFuture extends CompositeFuture {
// This is what the regular does, just for example
/*
static CompositeFuture all(List<Future> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
*/
static <T> CompositeFuture all(List<Future<T>> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
}
来源:
您应该得到结果,而不是期货本身:
CompositeFuture.all(futures).onComplete(compositeAsync -> {
if (compositeAsync.succeeded()){
CompositeFuture cf = compositeAsync.result();
cf.list().forEach(futureResult -> {
// do something with the result of each future
});
} else {
// at least 1 future failed
}
});
请注意 CompositeFuture extends Future<CompositeFuture>
,这就是您的代码有效的原因。但是在 onComplete
里面你应该直接使用它而不是作为 Future<CompositeFuture>