GWT中的同步回调函数出现问题

GWT中的同步回调函数出现问题,gwt,jakarta-ee,functional-programming,gwt-rpc,Gwt,Jakarta Ee,Functional Programming,Gwt Rpc,我正在做的是: 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(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;
}
输出为:

Value of sec role is
Assigned role is Admin
查询是为什么sec role的
“值是”
语句打印在
“分配的角色是管理员”
之前,因为函数是在
的打印语句之前调用的。sec role的值是“

为什么secondryRole的值即使在函数中被重新分配,仍然保持为“”。

正如GWT文档所说,在GWT中,您必须“接受异步事务”,而忘记同步事务

问题是getSecroleByOrgNID()调用了对服务器的异步调用,但该调用不会停止执行,因此它会继续他的工作(服务器需要更多的时间返回)。当服务器尚未响应时,您正在请求secondryRole


您应该在onSuccess()中调用一个方法,该方法与服务器响应一起工作。

正如GWT文档所说,在GWT中,您必须“接受异步事务”,而忘记同步事务

问题是getSecroleByOrgNID()调用了对服务器的异步调用,但该调用不会停止执行,因此它会继续他的工作(服务器需要更多的时间返回)。当服务器尚未响应时,您正在请求secondryRole

您应该在onSuccess()中调用一个方法,该方法可以处理服务器响应

Value of sec role is
Assigned role is Admin