期货完成后返回阿贾克斯回应

问题描述:

我在实习期间遇到问题。我必须执行一个Ajax POST到一个Servlet,该Servlet通过未来发送消息给参与者,并在期货完成后返回响应。这可能吗?期货完成后返回阿贾克斯回应

例子:

public void resultRetrieveAsync(HttpServletRequest request, HttpServletResponse response) throws Exception {  

    ActorRef sender = i create this sender someway; 
    Future<Object> future = Patterns.ask(sender, "HELLO", 5000); 
    //Let's imagine another actor has to respond "Hello Sender" 

    String hello = (String)Await.result(future, new Timeout(5000).duration()); 

    PrintWriter out = response.getWriter(); 
    out.print(hello); 
} 

我怎样才能巧妙地避免使用 “等待” 的?想象一下,“移动”远离服务器的等待时间以及更多基于Actor的应用程序。

对于Ajax“方”想象最简单的Ajax文章,你可以。

我无法想象如何做到这一点! 在此先感谢你们!

同步

future.get()将等待响应回来并为您提供结果。

String hello = (String) future.get(); 

注意:.get()方法使呼叫同步。

异步

您可以使用

CompletableFuture.supplyAsync(/* call your AJAX endpoint here */) 
       .thenAccept(/* display your HELLO String here */); 

希望这点你在正确的方向!

编辑

下面是一个例子JS功能,将做一个AJAX POST:

function myFunction() {  
    $.ajax({ 
     type: 'POST', 
     url: 'SOME_URL', //Make sure you put the correct endpoint URL here!     
     data: MY_DATE, //form data, or whatever here    
     contentType: 'application/json', 
     success: function(data) { 
        //DO SOMETHING HERE AFTER YOU GET THE RESPONSE       
       }, 
     error: function(jqXHR, textStatus, errorThrown) { 
        //Do something on ERROR here        
       } 
    }); 

} 

之后,只需调用myFunction()click事件或什么的。

+0

非常感谢您的回答@Mechkov, 如果您有时间,您可以提供一个脚本示例吗? –

+0

非常感谢!我会看看,但我有点担心ComparableFuture是一个Java 8功能,我不得不使用Java 7. –

+0

然后你不能使用它。这是一个Java 8功能。 – Mechkov