GWT - 同步返回方法

时间:2013-02-17 11:00:02

标签: java gwt rpc gwt-rpc synchronous

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

2 个答案:

答案 0 :(得分:1)

doSomething()中的onSuccess()怎么样?

你不能使用synchronous call in GWT.即使你认为它不是一个好习惯

如果需要,您必须在RPC调用的onSuccess();中执行此操作。

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

答案 1 :(得分:0)

只需将Config课程扩展为RunnableCallback。像这样:

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);
}