返回blocking.get中的值



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

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

上面的行返回void-我希望能够执行以下类似的操作,以便它在当时的子句中返回对象。我尝试添加返回语句,但行不通。

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

您可以在可用时使用映射与值一起使用。

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()用作触发的操作,当时可以进行阻止操作的值,但您也可以做其他事情。