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

时间:2011-05-08 19:12:11

标签: java http gwt asynchronous

在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表示页面没有响应,建议将其删除)

2 个答案:

答案 0 :(得分:6)

拥抱异步,不要打它!

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

答案 1 :(得分:3)

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

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