2011-05-08 160 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所建議的那樣,您不一定需要在應用程序範圍的事件總線上觸發一個事件:它有助於解耦,但這並非總是您所需要的。

相關問題