#gwt #jakarta-ee #functional-programming #gwt-rpc
#gwt #джакарта-ee #функциональное программирование #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(srOrg, srUser,
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
}
@Override
public void onSuccess(String result) {
secondryRole = resu<
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 остается » «, даже если его значение переназначено внутри функции?
Ответ №1:
Как говорится в документах GWT, в GWT вы должны «использовать асинхронные транзакции» и забыть о синхронных.
Проблема в том, что getSecroleByOrgNID() вызывает асинхронный вызов на сервер, но этот вызов не останавливает выполнение, поэтому он продолжает свою работу (серверу требуется больше времени для возврата). Вы запрашиваете вторую роль, когда сервер еще не отвечает.
Вы должны всегда вызывать метод внутри onSuccess(), который работает с ответом сервера.