当前位置: 首页 > 知识库问答 >
问题:

Vert.x传递未来而不执行

高茂
2023-03-14

我有下面的一段代码:

package starter;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;

public class MainVerticle extends AbstractVerticle {

  @Override
  public void start() {
    vertx.createHttpServer().requestHandler(req -> req.response().end("Hello Vert.x!")).listen(8080);

    cacheFirst("key", Future.future(h -> {
      System.out.println("Call external API");
      h.complete("Call external API");
    }))
    .onComplete(h -> System.out.println("Success"))
    .onFailure(t -> System.out.println("Failed"));
  }

  private Future<String> cacheFirst(String key, Future<String> task) {
    Future<String> getCache = Future.future(h -> {
      h.complete("ABCXYZ");
    });

    return getCache.onSuccess(res -> {
      System.out.println("Data from cache: " + res);
    }).onFailure(t -> {
      task.onSuccess(res -> {
        System.out.println("Store task result to cache");
      }).onFailure(tt -> {
        System.out.println("Do nothing");
      });
    });
  }

}

预期的控制台输出:

Data from cache: ABCXYZ
Success
Call external API
Data from cache: ABCXYZ
Success

共有1个答案

皇甫福
2023-03-14

只需将其包装在供应商内,就会产生预期的结果!
https://github.com/triet-truong/vertx-application/commit/6391c1b5d6b5f0e9b927ab0a9834b3ce6f0edf7f

cacheFirst("key", () -> Future.future(h -> {
      System.out.println("Call external API");
      h.complete("Call external API");
    }))
    .onComplete(h -> System.out.println("Success"))
    .onFailure(t -> System.out.println("Failed"));
java prettyprint-override">private Future<String> cacheFirst(String key, Supplier<Future<String>> task) {
    Future<String> getCache = Future.future(h -> {
      h.complete("ABCXYZ");
    });

    return getCache.onSuccess(res -> {
      System.out.println("Data from cache: " + res);
    }).onFailure(t -> {
      task.get().onSuccess(res -> {
        System.out.println("Store task result to cache");
      }).onFailure(tt -> {
        System.out.println("Do nothing");
      });
    });
  }
 类似资料:
  • 请查看下面位于扩展类内部的代码: null

  • 我得到这个错误: 我该怎么解决这个? 我使用的是Scala 2.12.8和Vert.x 3.7.1 感谢提前!

  • 是否有一种方法可以在不阻塞事件循环的情况下等待一个未来完成? 我知道这个错误通常意味着什么,但我不知道在这种情况下...我试图在谷歌上搜索它,但没有找到任何关于将哪份清单放在哪里的明确解释。和以前一样,除非是强制性的,我更喜欢一次学一件事。 那么,回到这个问题:“基本”Vert.x是否有一种方法可以在事件循环不受干扰的情况下等待未来?

  • React 的props传递是否只能传递对象,而不能传递数组? 我有如下的数组数据: 传递数据到: 我在组件内接受的时候,会变成对象: 所以,是否React 的props传递是否只能传递对象,而不能传递数组?如果想要传递数组应该怎么传递呢?对treeData 进一步封装是吗?

  • 我正在尝试将预订id从HTML传递到模态。在图片中,当我单击屏幕的“Reservation:preview”旁边的“Cancel”时,会出现一个模式,它应该包含Reservation:preview的id号 弹出Modal,但没有保留id号。拜托,怎么了? 我遵循了这个教程:https://www.geeksforgeeks.org/how-to-pass-data-into-a-bootstra

  • 问题内容: 我想使用laravel发送确认电子邮件。laravel Mail :: send()函数似乎只接受系统上文件的路径。问题是我的邮件模板存储在数据库中,而不存储在系统上的文件中。 如何将纯内容传递给电子邮件? 例: 问题答案: 更新:在 Laravel 5中, 您可以使用: 这是您的操作方式: