2013-07-18 32 views
-1

我知道RPC是异步的,但如何能在其他的方式来解决这个问题(不是等待响应等):如何解决在GWT中等待RPC响应?

public static String htsl(String sentence) 
{ 
    final DataBaseAsync db = GWT.create(DataBase.class); 
    String cookie = staticContent.getCookie("ll"); 
    String shortcut = cookie.split("/")[1]; 
    final String[] lala = new String[1]; 
    database.getTranslated(sentence, shortcut, new AsyncCallback<String>() { 



     @Override 
     public void onSuccess(String result) { 
      lala[0]=result; 

      //this result I want to return in static function htsl... ? 

     } 

     @Override 
     public void onFailure(Throwable caught) { 
      // TODO Auto-generated method stub 

     } 


    }); 
    //here I have blank result, because RPC is slower than te return.. 
    And i have always blank result 
    return lala[0]; 

} 

我知道这是不好的,但..如果没有可行的解决方案为此,如何等待回应?

回答

1

htsl异步(非阻塞,即与为响应callack而不是返回值)

+0

嗯,该怎么做? –

+0

查看Jeroen的答案,与我的答案相同,但带有示例代码。您也可以使用['Callback'](http://www.gwtproject.org/javadoc/latest/com/google/gwt/core/client/Callback.html)或自定义界面作为参数,并将其称为从RPC的'AsyncCallback'返回。如果您不想向调用者公开错误处理,那么自定义接口可能只有一个'onSuccess'(我宁愿调用'onTranslated')。 –

0

做它像这样:

public static String htsl(String sentence, AsyncCallback<String> myCallback) { 
    final DataBaseAsync db = GWT.create(DataBase.class); 
    String cookie = staticContent.getCookie("ll"); 
    String shortcut = cookie.split("/")[1]; 
    final String[] lala = new String[1]; 

    database.getTranslated(sentence, shortcut, myCallback); 
} 

然后你让一些其他类中实现的AsyncCallback,将它作为myCallback参数传递给htsl方法,并且Bob的叔叔。