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

时间:2017-09-27 22:53:59

标签: java ratpack

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用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()作为阻止操作的值准备就绪时触发的操作,但您也可以执行其他操作。