0

OK、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()マップが初期化される前にメソッドが呼び出されることがあるため、非同期呼び出しが終了しない場合は実行できません。方法はありますか?

4

2 に答える 2

1

doSomething()でどうonSuccess()ですか?

synchronous call in GWT.どういうわけか作ったのに使えない

これが必要な場合はonSuccess();、RPC呼び出しの処理を行う必要があります。

したがって、最良のアイデアは、単に非同期メソッドを使用し、提供されたコールバックを介して実行を継続することです。最終的には、はるかに優れたユーザーエクスペリエンスと、よりプロフェッショナルな外観の
アプリケーションになります。

于 2013-02-17T11:22:43.013 に答える
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);
}
于 2013-02-18T11:09:34.577 に答える