2011-06-02 89 views
0
同步回調函數

我在做什麼是:問題與GWT

getSecroleByOrgNID(orgList[i-2],cu.currentUser.getProfileObj()); 
System.out.println("Value of sec role is "+ secondryRole); 

其中getSecroleByOrgNID功能是:

private String getSecroleByOrgNID(COrganization srOrg, CProfile srUser) { 
    analyticsSrvc.getSecroleByOrgNID(srOrg, srUser, 
     new AsyncCallback<String>() { 
      @Override 
      public void onFailure(Throwable caught) { 
      } 

      @Override 
      public void onSuccess(String result) { 
       secondryRole = result; 
       System.out.println("Assigned role is " + secondryRole); 
      } 
     }); 
    return null; 
} 

其中secondryRole是

String secondryRole = " "; 

輸出是:

Value of sec role is 
Assigned role is Admin 

查詢是爲什麼"value of sec role is "語句在"Assigned role is Admin"之前打印,因爲在打印語句"value of sec role is "之前調用該函數。 爲什麼secondryRole的值仍然保留「」,儘管其值在函數內重新分配?

回答

4

正如GWT文檔所述,在GWT中,您必須「接受異步事務」並忘記同步事務。

問題是,getSecroleByOrgNID()調用服務器的異步調用,但此調用不會停止執行,因此它繼續他的工作(服務器需要更多時間返回)。當服務器沒有響應時,您正在請求secondryRole。

您應該調用方法始終在與服務器響應一起工作的onSuccess()中。