Dan*_*h94 4 java gwt asynchronous 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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是调用方法:`
public String check()
{
s = null;
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, baseUrl
+ "check&user=" + user + "&password=" + password);
execRequest(builder);
return s;
}
Run Code Online (Sandbox Code Playgroud)
我需要check方法来返回响应(或错误)而不是返回null.
我尝试了大脑写作的解决方案:`
while (s == null);
Run Code Online (Sandbox Code Playgroud)
等待调用完成,但这只是在开发模式下破坏了页面.
(chrome表示页面没有响应,建议将其删除)
拥抱不同步,不要打架!
换句话说:让你的check方法异步,传递一个回调参数而不是返回一个值; 并将回调传递给execRequest(简单地将每个赋值替换s为对回调的调用).您不一定需要在应用程序范围的事件总线上触发事件,正如Jai建议的那样:它有助于解耦,但这并不总是您需要/想要的.