使用Vertx.io链接可变数量的异步回调

时间:2018-04-08 07:45:08

标签: java vert.x

我练习使用vertx.io和我的反应性菜鸟。在我的场景中,我必须进行n次操作并一起收集结果以完成我的职责:

public void doSomething(String[] params, Handler<AsyncResult<List<Stuff>>> h) {
  for(int i=0; i<params.length; i++) {
    doSomethingElse(params[i], hElse -> {
      // compose the list of Stuff
      ... 
    });
  }
}

我希望在完成doSomethingElse之前收集每个doSomething方法的结果。这是实现这一目标的正确方法是什么?我应该更改我的代码以使用vertx.io的未来吗?

2 个答案:

答案 0 :(得分:2)

这可以在rx中轻松完成。只需确保doSomethingElse返回Single即可。如果您有多个数据,也可以将Single替换为Observable

public void doSomething(String[] params, Handler<AsyncResult<List<Stuff>>> h) {
    List<Single<String>> list = new ArrayList();
  for(int i=0; i<params.length; i++) {
        list.push(doSomethingElse(params[i]))
  }
    Single.zip(list, r -> r)
    .map(results -> {
        // Results
    })
    .subscribe();
}

public Single<String> doSomethingElse(String param){
    return Single.just("Hello");
}

答案 1 :(得分:1)

如果您的项目中没有RX,则无需携带。 您可以使用CompositeFuture解决这个问题:

List<Future> futures = new ArrayList<>();
futures.add(/* Your Futures here */);
CompositeFuture.all(futures);