播放框架 - 在 X 秒后执行 processing/redirect 时渲染视图

play framework - render view while doing processing/redirect after X seconds

注意:我是刚玩框架的

为了我的游戏!项目,我需要某种形式的异步编程。简单地说,我需要显示一个视图,同时在后台进行处理,然后进行重定向或呈现新表单。

已被询问但没有回复。我查看了 Play 文档页面,但没有找到任何解决方案。

我试过的:

我试图修改 play starter example 给出的 AsynchController。然而,当导航到 http://localhost/message 时,该函数似乎更像是一个睡眠而不是一个已设置和 "forgotten" 的计划任务,即可以继续进一步编码。

AsynchController 片段: 有自己的修改

public CompletionStage<Result> message() {
        return getFutureMessage(5, TimeUnit.SECONDS).thenApplyAsync(s -> ok(views.html.User.Account.verified.render()), exec);
    }

    private CompletionStage<String> getFutureMessage(long time, TimeUnit timeUnit) {
        CompletableFuture<String> future = new CompletableFuture<>();
        actorSystem.scheduler().scheduleOnce(
            Duration.create(time, timeUnit),
            () -> future.complete("Waiting 5 seconds..."),
            exec
        );
        return future;
    }

路线入口

GET     /message                 controllers.AsyncController.message

用途:

我的目标是显示消息 Waiting 5 seconds...,然后延迟 +/- 5 秒。此后它将到达 "future"(这是正确的吗?),从而呈现视图(或重定向到控制器),在本例中为 verified 页面(用于验证帐户)。

我的最初目标是否在正确的轨道上,我在哪里可以找到类似的好例子?

我有一个简单的解决方案,但是你必须在路由中设置 2 个条目。

第一个条目显示消息 "Waiting 5 seconds...",同时它向第二个条目发出 AJAX 调用。第二个条目的控制器执行 calculation/sleep 5 秒,然后 returns 所需的内容,这些内容将由 Javascript 在第一页上呈现。

在第一个网页中,您可以放置​​如下内容:

  axios.get(second-url)
      .then(function (response) {
        document.getElementById(someplaceholder).innerHTML=response.data.
      })