GWT如何使用Http承诺进行异步响应,就像在游戏中一样!框架
我从游戏中回来了!将世界框架转换为GWT应用程序 我需要从GWT服务器调用HTTP响应 在游戏中!framework1我只是“等待”WS.get.async结果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
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){…}
}
要使其发挥作用,您需要很多东西:
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