GWT异步调用执行顺序问题
我对GWT中的抛出执行有问题。所以我想在“服务器端”的客户端显示一个简单的字符串列表。好的,我在我的主要课程中有以下几点: private final GreetingServiceAsync greetingService=Util.getInstance();//这就像>键入GWT.create(GreetingService.class); public ArrayList songs=new ArrayList() 在我的onModuleLoad()方法中,我调用了另一个私有方法,该方法对服务器类进行异步调用: songs.addAll(getSongsList()) 因此,我的getSongsList方法如下:GWT异步调用执行顺序问题,gwt,Gwt,我对GWT中的抛出执行有问题。所以我想在“服务器端”的客户端显示一个简单的字符串列表。好的,我在我的主要课程中有以下几点: private final GreetingServiceAsync greetingService=Util.getInstance();//这就像>键入GWT.create(GreetingService.class); public ArrayList songs=new ArrayList() 在我的onModuleLoad()方法中,我调用了另一个私有方法,该方法
public ArrayList<String> getSongsList() {
final int defaultSize = 4;
final ArrayList<String> temp = new ArrayList<String>();
GWT.log("Enter in getSongsLists");
greetingService.greetSongMostPopular(defaultSize,
new AsyncCallback<ArrayList<String>>() {
public void onSuccess(ArrayList<String> result) {
GWT.log("Result is:" + result);
temp.addAll(result);
GWT.log("Case 1 TEMP= " + temp);
}
public void onFailure(Throwable caught) {
// throw new
// UnsupportedOperationException("Not supported yet.");
Window.alert("Error greeting data");
}
});
GWT.log("CASE 2 TEMP = " + temp);
return temp;
}
public ArrayList getSongsList(){
最终int defaultSize=4;
最终ArrayList温度=新ArrayList();
GWT.log(“输入GetSongsList”);
greetingService.greetSongMostPopular(默认大小,
新的AsyncCallback(){
成功时公共无效(ArrayList结果){
GWT.log(“结果为:”+Result);
温度加总(结果);
GWT.log(“案例1温度=”+TEMP);
}
失败时的公共无效(可丢弃){
//抛出新的
//UnsupportedOperationException(“尚未支持”);
窗口警报(“错误问候数据”);
}
});
GWT.log(“情况2温度=”+TEMP);
返回温度;
}
我的问题是在第一种情况下
[信息][主模块]-案例1温度=[歌曲1、歌曲2、歌曲3、歌曲4]
但是在案例2中,我得到的ArrayList是空的
[信息][主模块]-案例1温度=[]
我做错了什么
提前谢谢 这是正常的:当服务器发送答案时会调用回调,但大多数人会立即返回 调用是异步的 所有代码都必须在回调中完成(调用函数) 以下是确切的过程:
- greetingService.greetSongMostPopular被称为
- 温度为空
- 第二个GWT.log被称为:temp始终为空
- getSongsList方法return:temp始终为空
- 服务器将应答发送到回调:temp已填充
稍后,在后台调用onSuccess并显示结果。此时,您应该调用一个函数来处理结果。您可以使用类似于AsyncCallback类的模式,使用onSuccess和onFailure使此代码的调用者可以处理这两种情况,或者您可以让调用者传入他们自己的AsyncCallback实例,这将使它成为GreetSongsHostPopular RPC函数的薄包装器。您没有做错任何事情。这是预期的,因为您不处理同步调用。因此,只有在异步调用从服务器端返回后才会调用案例2。Hi,我遇到了类似的问题。你能告诉我你做了什么吗。我的问题是关于这个链接