java - Vertx future

标签 java asynchronous vert.x

我有一个场景,我得到 List<Future<String>>来自处理程序,现在必须返回 Future<List<String>> 。 尽管我在完成后检查所有 future,但为什么输出始终为空。

Future<List<String>> output = Future.future();
List futures =
    services.entrySet().stream()
        .map(
            entry -> {
              Future future = Future.future();
              webClient
                  .getAbs(entry.getKey())
                  .timeout(1000)
                  .send(
                      ar -> {
                        if (ar.succeeded()) {
                          if (ar.result().statusCode() == HttpResponseStatus.OK.code()) {
                            services.put(entry.getKey(), "OK");
                            future.complete(entry.getKey());
                          }
                        } else {
                          services.put(entry.getKey(), "Failed");
                          future.fail(ar.cause());
                        }
                      });
              return future;
            })
        .collect(Collectors.toList());

CompositeFuture.join(futures)
    .setHandler(
        ar -> {
          futures.forEach(
              fut -> {
                okServices.add(fut.toString());
              });
        });
output.complete(okServices);
System.out.println(output.result());
return output;

最佳答案

不确定你的意思,但列表的 future 应该通过CompositeFuture来实现 https://vertx.io/docs/vertx-core/java/#_async_coordination

我会把你的代码这样写:

List<Future<String>> futures = services.entrySet().stream().map( entry -> { 
  Future future = Future.future(); 
  WebClient.getAbs(entry.getKey()).send( future ); 
  return future;
} ).collect(toList);

CompositeFuture.join(futures).onComplete(ar -> {
  futures.forEach( fut -> {
    if (fut.succeeded()) {
      log.info( "succeeded " + fut );
    } else {
      log.warn( "failed " + fut );
    }
  }
});

关于java - Vertx future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61434963/

相关文章:

mongodb - 如何在 Vert.x 中执行顺序 while 循环

java - Vertx 上的并发

python - 为什么对内存操作使用同步编程更好?

c# - 当 Controller Action 同步时,有什么理由使用异步/等待吗?

java - 组合多个加密 key 以生成加密 key

java - 忽略选项 -Xprof; 10.0 中移除了支持

javascript - 等待从 javascript 函数返回直到满足条件

java - 我怎样才能减少 vert.x 中的样板代码量

java - 如何在运行时跟踪已弃用的 java API?

java - 如何在不使用字符串的情况下在 Java 中获取输入?