首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CompositeFuture Vertx获得结果

从CompositeFuture Vertx获得结果
EN

Stack Overflow用户
提问于 2021-12-29 14:34:26
回答 1查看 454关注 0票数 0

我最近学到了复合期货。我知道我可以有一个期货列表,当它们全部完成后,compositeFuture处理程序将被调用:

代码语言:javascript
运行
复制
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>>类型,但是结果()返回了未来。如何将Future<Buffer>Future<CompoiteFuture>中取出

我使用下面的示例将参数化期货传递到compositeFuture.all(futures);

代码语言:javascript
运行
复制
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()]));
    }
}

来源:Vert.x java List parameterization

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-30 08:17:05

你应该得到结果,而不是未来:

代码语言:javascript
运行
复制
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>使用

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70520836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档