[英]play framework - render view while doing processing/redirect after X seconds
注意:我是新手玩框架
對於我的游戲! 項目,我需要某種形式的異步編程。 簡單地說,我需要顯示一個視圖,同時在后台進行處理,然后再渲染重定向或新表單。
這個問題一直沒有回復。 我看過Play文檔頁面,我沒有找到任何解決方案。
我嘗試過的:
我試圖修改play starter example
給出的AsynchController
。 然而,當導航到http://localhost/message
,該函數似乎更多地作為睡眠而不是被設置和“忘記”的計划任務,即可以繼續進行進一步編碼。
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秒延遲。 此后它將到達“未來”(這是正確的嗎?),由此它將呈現視圖(或重定向到控制器),在這種情況下是verified
頁面(用於帳戶驗證)。
我是否按照我最初的目標走在正確的軌道上,哪里可以得到類似的好例子?
我有一個簡單的解決方案,但您必須在路線中設置2個條目。
第一個條目顯示消息“Waiting 5 seconds ...”,同時它向第二個條目發出AJAX調用。 第二個條目的控制器進行計算/休眠5秒,並返回所需的內容,這些內容將通過Javascript在第一頁上呈現。
在第一個網頁中,您可以輸入以下內容:
axios.get(second-url)
.then(function (response) {
document.getElementById(someplaceholder).innerHTML=response.data.
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.