【问题标题】:How to deal with Future in Vert.x如何在 Vert.x 中处理 Future
【发布时间】:2021-06-20 11:42:02
【问题描述】:

我对 Vertx 框架很陌生。所以我对使用异步编程有点迷茫。如果我只想计算结果而不是返回另一个未来,我的问题是如何处理未来。

class example {
private computedData;
public Future<Void> process() {
      Future<T> search = OperationFromDataBase();
      Future<Void> finalFuture = search.onComplete(re -> {
            computeWithresult();
            for (;computeResult;) {
                getOtherFuturesFromDataBase()
                future1.oncomplete(..);
                future2.oncomplete(..);
                ...
                futurei.oncomplete(..);
            }).mapEmpty();
     return finalFuture;
 }
 };

我搜索了有关这些未来内容的实践,但我不太了解。我不知道这是否是正确的做法。我想要做的是在搜索未来结束后,我可以根据其结果创建其他期货,如果它包含的所有期货都完成,我想让最终的未来通知其他函数从对象返回响应。我是否犯了一些错误,例如我在 future1..i 未完成时在其他函数上调用 finalFuture.oncomplete?我该怎么做才能解决这个问题?

【问题讨论】:

  • 您不必返回Future。不关心运算结果的可以忽略。

标签: java future vert.x


【解决方案1】:

如果 finalFuture 依赖于 future1..future n 的结果,我建议查看 CompositeFutures。 Composite Future Docs Here

CompositeFutures.all 等待所有期货成功,或者如果一个失败则失败。

如果您在初始化 CompositeFuture 之前生成期货,那么您可以稍后单独访问该期货的结果。

Future f1 = getX()
Future f2 = getY()
Future f3 = getZ()

CompositeFuture cf = CompositeFuture.all([f1,f2,f3])

cf.onComplete(ar -> {
    //Check Succeeds
    //DO FURTHER PROCESSING
})

我希望我理解正确,这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2019-11-16
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多