GWT如何使用Http承诺进行异步响应,就像在游戏中一样!框架

GWT如何使用Http承诺进行异步响应,就像在游戏中一样!框架,gwt,Gwt,我从游戏中回来了!将世界框架转换为GWT应用程序 我需要从GWT服务器调用HTTP响应 在游戏中!framework1我只是“等待”WS.get.async结果 Promise<HttpResponse> futureResponse = WS.url( "http://www.google.com" ).getAsync(); await(futureResponse); Promise futuresponse=WS.url( "http://www.google.c

我从游戏中回来了!将世界框架转换为GWT应用程序

我需要从GWT服务器调用HTTP响应

在游戏中!framework1我只是“等待”WS.get.async结果

Promise<HttpResponse> futureResponse = WS.url(
    "http://www.google.com"
).getAsync();
await(futureResponse); 
Promise futuresponse=WS.url(
"http://www.google.com"
).getAsync();
等待(未来反应);
在游戏中!framework2我只返回一个异步响应

return async(
    WS.url(feedUrl).get().map(
    new Function<WS.Response, Result>() {
        public Result apply(WS.Response response) {
            return ok("Feed title:" + response.asJson().findPath("title"));
        }
    }
)
);
返回异步(
WS.url(feedUrl.get().map(
新函数(){
应用公共结果(WS.Response响应){
返回ok(“Feed title:+response.asJson().findPath(“title”);
}
}
)
);
这两个代码段都是从播放!框架的文件


如何在GWT后端实现相同的结果?

GWT没有承诺,但您可以使用它,除了其他功能外,它还有一个基础

编辑:注意GWT是以客户端为中心的,因此这种方法仅适用于浏览器js运行时

您的示例可以这样编写:

import static com.google.gwt.query.client.GQuery.*;
导入com.google.gwt.query.client.*;
//使用$$创建带有ajax方法参数的jso
//不过,您可以使用Settings.create()来代替java构建器。
Promise gettingInfo=ajax($$($url:rest_service.js,type:post,dataType:json,data:{foo:bar}));
//你可以根据需要多次使用承诺,
//它将始终维护状态和服务器数据。
gettingInfo.done(新函数(){public void f()){
属性jsonResponse=arguments(0);
Window.alert(“提要标题:+jsonResponse.get”(“标题”);
}});
请注意,GQuery方法返回对某些方法(ajax、动画等)的承诺


在本文中,还有另一个使用gquery承诺的代码示例

在GWT中,您需要大量的锅炉板代码来执行异步服务器端调用,与Play相比,GWT中的Physophy是非常不同的

你唯一能做的事情就是:

myServiceAsync.myService(myRequest, new AsyncCallBack<myResponse>(){
    onSuccess(MyResponse response){
      // do your stuff
    }
    onFailure(Throwable e){...}
}
myServiceAsync.myService(myRequest,new AsyncCallBack()){ onSuccess(MyResponse-response){ //做你的事 } onFailure(可丢弃的e){…} } 要使其发挥作用,您需要很多东西:

  • 实现服务的RemoteServlet(第2点的同步接口)
  • 两个接口一个是同步的,另一个是异步的
  • 客户端上同步服务的实例,返回服务的异步版本
  • 希望能有帮助 GWT主页上的进一步说明:

    您可以使用GWTP 它有一个简单的分派,带有易于使用的操作-响应元组。 例如:

    该代码来自GWT调度: 如果您不想使用完整的MVP框架,这也是一种选择。

    没有什么比得上“GWT服务器”或“GWT后端”。如果您使用的是GWT-RPC或RequestFactory,那么它都是基于servlet的,不支持异步处理;而且GWT只提供处理客户端请求的方法,您在服务器端的操作完全由您自己决定,并且是玩Java(假设是GWT-RPC或RequestFactory,以及它们的内置实现)

    如果您有一个返回
    java.util.concurrent.Future
    (或类似内容)的HTTP客户端库,那么您可以执行
    返回Future.get();
    以等待HTTP请求完成

    不过,Java中的大多数HTTP客户端LIB都是同步(阻塞)的,因此您甚至不需要考虑异步性。如果您想同时执行多个操作,一些LIB可以异步工作,但许多LIB(如果不是大多数的话)可以异步工作使用回调,而不是在
    Future
    中返回。然后可以使用锁等待完成,或者使用类似Guava的
    SettableFuture
    (从回调中设置其值,在需要时获取其值,它将阻塞,直到设置值为止)



    注意:大多数答案(如果不是全部的话)都是关于客户端代码的,而不是你所问的服务器端代码。

    我被告知GQuery是用于前端开发的。我正在寻找在后端运行的东西。请确认。GWT是一个客户端框架,它只使用java生成在浏览器中运行的javascript。GWT是不可知的o服务器端的功能(rails、php、java、spring…)。对于服务器端,您可以使用在JVM中运行的Future/Promissions的任何实现,尽管gquery Promissions可以在JVM中运行,但对于javascript应用程序来说,gquery Promissions可以在JVM中运行。有许多java库具有像jdeferred这样的承诺,甚至类似java jre的Future