好的,GWT中没有同步调用。
但如果我有这样的事情:
class XXX {
Config c=new Config();
c.doSomething();
}
和类Config
public class Config {
private static HashMap<String,String> map;
public Config(){
final ServerProxyAsync serverProxy= GWT.create(ServerProxy.class);
serverProxy.getParameters(new AsyncCallback<HashMap<String,String>>() {
@Override
public void onFailure(Throwable caught) {
System.out.println("getParameters: FAILED!");
map=null;
}
@Override
public void onSuccess(HashMap<String, String> result) {
System.out.println("getParameters: OK!");
map=result;
// RETURN NOW!!!!
}
});
}
如果异步调用没有终止,我就无法执行doSomething()
,因为有时在初始化映射之前调用该方法。
有办法吗?
答案 0 :(得分:1)
doSomething()
中的onSuccess()
怎么样?
你不能使用synchronous call in GWT.
即使你认为它不是一个好习惯
如果需要,您必须在RPC调用的onSuccess();
中执行此操作。
因此,最好的想法是简单地使用异步方法并通过提供的回调继续执行。您最终将获得更好的用户体验,并且更专业的出现 应用
答案 1 :(得分:0)
只需将Config
课程扩展为Runnable
或Callback
。像这样:
public class Config {
private static HashMap<String,String> map;
private final Runnable callback;
public Config(Runnable callback){
this.run = run;
final ServerProxyAsync serverProxy= GWT.create(ServerProxy.class);
serverProxy.getParameters(new AsyncCallback<HashMap<String,String>>() {
@Override
public void onFailure(Throwable caught) {
System.out.println("getParameters: FAILED!");
map=null;
}
@Override
public void onSuccess(HashMap<String, String> result) {
System.out.println("getParameters: OK!");
map=result;
callback.run();
}
});
}
}
然后你可以像这样使用它:
class XXX {
final Runnable callback = new Runnable() {
@Override
public void run() {
dosomething1();
}
};
Config c=new Config(callback);
}