java - 在 Ratpack 中的 Blocking.get 中返回一个值

标签 java ratpack

在 Ratpack 中使用 Blocking.get() 方法后如何返回对象或列表?

Blocking.get(()->
            xRepository.findAvailable()).then(x->x.stream().findFirst().get());

上面的行返回 void - 我希望能够执行如下操作,以便它返回 then 子句中的对象。我尝试添加返回语句但不起作用。

Object x = Blocking.get(()->
            xRepository.findAvailable()).then(x->x.stream().findFirst().get());

最佳答案

您可以使用 map 来处理可用的值。

Blocking.get(() -> xRepository.findAvailable())
         .map(x -> x.stream().findFirst().get())
         .then(firstAvailable -> ctx.render("Here is the first available x " + firstAvailable))

Ratpack 的 Promise<T> 不提供像Promise.get()这样的阻塞操作阻塞当前线程并返回结果。相反,您必须订阅 Promise 对象。您可以使用的方法之一是 Promise.then(Action<? super T> then) 它允许您指定当给定值可用时将触发的操作。在上面的例子中我们使用ctx.render()作为当阻塞操作的值准备就绪时触发的操作,但您也可以执行其他操作。

关于java - 在 Ratpack 中的 Blocking.get 中返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46458406/

相关文章:

java - xws-security 与 Java 8 不兼容吗?

java - Jetty 服务器未启动

java - Ratpack:如何从类路径渲染文件?

ratpack - 在ratpack中加载并编译模板: blocking or not?

testing - 使用 Kotlin 为 http 方法设置 Spek 测试?

java - JFrame 构造函数的最佳实践?

java - Logback-动态配置

java - 在 Shutdownhook 上使用 JavaFX Application.stop() 方法

java - 在 Ratpack Handler 中转换 Springboot Controller 类