如何在继续之前等待异步http结束?

在GWT中有没有办法等待异步调用完成? 我需要继续响应(这是一个登录屏幕,所以成功意味着改变到实际游戏,失败意味着留在登录屏幕)。
这是电话:

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

我需要check方法来返回响应(或错误)而不是返回null。
我尝试了脑力劳动的写作解决方案:`

 while (s == null); 

等待调用完成,但这只是在开发模式下粉碎了页面。
(chrome说页面没反应,建议杀死它)

拥抱异步,不要打它!

换句话说:使check方法也异步,传递一个回调参数而不是返回一个值; 并将回调传递给execRequest (只需通过调用回调将每个赋值替换为s )。 您不一定需要在应用程序范围的事件总线上触发事件,正如Jai所说:它有助于解耦,但这并不总是您需要/想要的。

你不应该那样检查完成情况。 这里最好的设计实践是在登录异步调用完成时触发自定义事件。当您收到事件(通过事件总线)时,您将执行剩余的任务。

阅读http://code.google.com/webtoolkit/articles/mvp-architecture.html#events