2013-02-17 57 views
0

好的,GWT中没有同步调用。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(),因为有时该方法在地图初始化之前调用。 有没有办法?

回答

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

0123如何在onSuccess()doSomething()

即使你做当你需要这个,你必须做你的RPC调用的onSuccess();的东西,它somehowits不是一个好的做法

不能使用synchronous call in GWT.

所以,最好的办法是简单地使用异步方法,并继续通过回调执行provided.You将最终获得更好的用户体验,以及更加专业的出现
应用。

+0

谢谢您的回答。 不幸的是,我不能把doSomething()放在onSuccess()中,因为有时候我需要调用doSomething1()和某个时候doSomething2()... 配置它是一个初始化应用程序的一些参数的类,我需要将其用于不同的目的。 – 2013-02-17 14:32:55

+1

@ nap.gab我认为你所说的并不是一个无法解决的问题。我遇到了发展GWT的这些问题,我可以解决它们。也许你应该问一个新的,更具体的问题和更多的细节。 – qben 2013-02-17 15:21:23