0

好的,GWT 中没有同步调用。

但如果我有这样的事情:

class XXX {
    Config c=new Config();
    c.doSomething();
}

和类配置

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(),因为有时在地图初始化之前调用该方法。有办法吗?

4

2 回答 2

1

doSomething()进去怎么样onSuccess()

你不能使用synchronous call in GWT.即使你以某种方式使它不是一个好习惯

当你需要这个时,你必须在onSuccess();你的 RPC 调用中做这些事情。

因此,最好的办法是简单地使用异步方法并通过提供的回调继续执行。您最终将获得更好的用户体验,以及更专业的
应用程序。

于 2013-02-17T11:22:43.013 回答
0

只需扩展您的Config课程以获取 aRunnable或 a 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);
}
于 2013-02-18T11:09:34.577 回答