从 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>