2011-05-08 90 views
4

在GWT有什么方法可以等待异步调用完成? 我需要响应才能继续(这是一个登录屏幕,所以成功意味着更改为实际游戏,失败则意味着停留在登录屏幕中)。
这里是呼叫:如何在继续之前等待异步http结束?

private void execRequest(RequestBuilder builder) 
{ 
    try 
    { 
     builder.sendRequest(null, new RequestCallback() 
     { 
      public void onError(Request request, Throwable exception) 
      { 
       s = exception.getMessage(); 
      } 

      public void onResponseReceived(Request request, 
        Response response) 
      { 
       s = response.getText(); 
      } 
     }); 
    } catch (RequestException e) 
    { 
     s = e.getMessage(); 
    } 
} 

,这里是调用方法:`

public String check() 
{ 
    s = null; 
    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, baseUrl 
      + "check&user=" + user + "&password=" + password); 
    execRequest(builder); 
    return s; 
} 

我需要的检查方法返回的响应(或错误),而不是返回null。
我试着写的脑死亡的解决方案:`

while (s == null); 

等待通话结束,但刚刚粉碎了网页开发方式。
(铬表示页面没有反应,并建议杀死它)

+0

看到这篇文章http://stackoverflow.com/questions/11086591/prevent-method-call-until-async-call-completes-gwt-platform/17932909#17932909 – Tony 2013-07-29 19:54:20

回答

6

拥抱不同步,不打它!

换句话说:让你的check方法也是异步的,传递一个回调参数而不是返回一个值;并将回调传递给execRequest(只需将每个任务分配给s并调用回调)。 正如Jai所建议的那样,您不一定需要在应用程序范围的事件总线上触发一个事件:它有助于解耦,但这并非总是您所需要的。

相关问题