Play Async 动作中的并行独立休息调用
Parallel independent rest calls in Play Async action
我想在 Java play Async 动作和 return CompletionStage 中进行 3 个独立的并行 rest 调用,后者呈现包含 rest 调用的所有结果的视图。
我可以使用 for Comprehension 在 Scala 中完成此操作
def index() = Action.async { implicit request: Request[AnyContent] =>
val f1 = getRecommendations()
val f2 = getViewedItems()
cal f2 = getCustomer()
val futureResults = for {
recommendations <- f1
viewedItems <- f2
customer <- f3
} yield (recommendations, viewedItems, customer)
futureResults.map(results => Ok(views.html.readingList.render(results._1, results._2, result_3))
)
}
我想在 Java 播放异步操作中做类似的事情
终于有时间来解决这个问题了。我在 Java 中得到的最接近的如下:
public CompletionStage<Result> index() {
CompletableFuture<List<Item>> recommendationsCF = getRecommendations();
CompletableFuture<List<Item>> viewedItemsCF = getViewedItems();
CompletableFuture<List<Customer>> customerCF = getCustomer();
return CompletableFuture.allOf(recommendationsCF,viewedItemsCF,customerCF).thenApply((voidcf) -> ok(
views.html.home.render(
recommendationsCF.join(),
viewedItemsCF.join(),
customerCF.join())
));
我想在 Java play Async 动作和 return CompletionStage 中进行 3 个独立的并行 rest 调用,后者呈现包含 rest 调用的所有结果的视图。
我可以使用 for Comprehension 在 Scala 中完成此操作
def index() = Action.async { implicit request: Request[AnyContent] =>
val f1 = getRecommendations()
val f2 = getViewedItems()
cal f2 = getCustomer()
val futureResults = for {
recommendations <- f1
viewedItems <- f2
customer <- f3
} yield (recommendations, viewedItems, customer)
futureResults.map(results => Ok(views.html.readingList.render(results._1, results._2, result_3))
)
}
我想在 Java 播放异步操作中做类似的事情
终于有时间来解决这个问题了。我在 Java 中得到的最接近的如下:
public CompletionStage<Result> index() {
CompletableFuture<List<Item>> recommendationsCF = getRecommendations();
CompletableFuture<List<Item>> viewedItemsCF = getViewedItems();
CompletableFuture<List<Customer>> customerCF = getCustomer();
return CompletableFuture.allOf(recommendationsCF,viewedItemsCF,customerCF).thenApply((voidcf) -> ok(
views.html.home.render(
recommendationsCF.join(),
viewedItemsCF.join(),
customerCF.join())
));