Проблема с функцией обратного вызова Sync в GWT - PullRequest
0 голосов
/ 02 июня 2011

То, что я делаю:

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 = " ";

Выходis:

Value of sec role is
Assigned role is Admin

Запрос, почему оператор "value of sec role is " печатает перед "Assigned role is Admin", так как функция вызывается перед оператором print "value of sec role is ".И почему значение secondryRole остается "", даже если его значение переназначено внутри функции?

1 Ответ

4 голосов
/ 02 июня 2011

Как сказано в документации GWT, в GWT вы должны «охватывать асинхронные транзакции» и забывать о синхронных транзакциях.

Проблема в том, что getSecroleByOrgNID () вызывает асинхронный вызов сервера, но этот вызов не останавливает выполнение, поэтому он продолжает свою работу (серверу нужно больше времени для возврата). Вы запрашиваете secondryRole, когда сервер еще не отвечает.

Вы должны вызывать метод всегда внутри onSuccess () , который работает с ответом сервера.

...