Поток после вызова RPC в GWT? - PullRequest
0 голосов
/ 19 марта 2012
public Class GUi(){
 // More Code

public void onClick(ClickEvent event) {

LoginServer loginServer =new  LoginServer(getTextBoxUsername().getText(),getTextBoxPassword().getText());     
loginServer.setConnection(connection);
connection=loginServer.getConnection();
System.out.println(" connected "+connection);
// More code
}

public class LoginServer {
// more code
public void setConnection(Boolean connection) {

    String[] authentication = {username,password};
    //RPC call
    connectionService.connectionServer(authentication, callbackConnection); 
    System.out.println("setConnection" + connection);
}

public Boolean getConnection() {
    return connection;
}
AsyncCallback callbackConnection = new AsyncCallback() {

    public void onFailure(Throwable caught) {
        // TODO Auto-generated method stub
        connection=false;
    }

    public void onSuccess(Object result) {
        connection=true;
        System.out.println("onSuccess + connection);

    }
};

}

выход

setConnectionnull
connected null
onSuccesstrue

По Мне, Выход должен быть.

 onSuccesstrue
 setConnectiontrue
 connected null

Поскольку я создал объект LoginServer ;, тогда я вызываю метод setConnection, где написан RPC-вызов, который работает отлично. OnSucces изменит значение соединения. Тогда я вызвал метод getConnection.

Я тоже не понимаю, почему connected null

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

Когда / если вы попросите свою жену / подругу принести вам пиво, у вас не будет этого пива в руке через секунду после того, как вы ее спросите, и вы можете продолжать смотреть матч и реагировать, вы не заблокированыожидание вашего пива: это называется асинхронной обработкой.

Аналогично, connection по-прежнему null секунда после отправки вашего вызова RPC.

См. https://groups.google.com/d/msg/Google-Web-Toolkit/-soVdfMGug8/vRmqIcAZ5zsJ

1 голос
/ 19 марта 2012
setConnectionnull

Это потому, что функция обратного вызова выполняется асинхронно.То есть эта функция вызывается после того, как ответ поступает в браузер с сервера.Но другая часть кода, такая как

 connection=loginServer.getConnection();

, выполняется немедленно, и к этому времени соединение все еще равно нулю.

Спасибо, Ганеш

...