Avec GWT-RPC, un callback asynchrone ressemble à ceci :
AsyncCallback<ResultBean> callback = new AsyncCallback<ResultBean>() {
public void onSuccess(ResultBean result) {
// Code to run once callback completes
}
public void onFailure(Throwable caught) {
// Error handling code
}
};
asyncService.call(callback);
// Subsequent code block
En onSuccess()
sera appelée une fois que les résultats auront été reçus du serveur. Le bloc de code suivant sera exécuté avant que le callback ne soit terminé, car le single thread doit terminer l'exécution de l'événement actuel avant de pouvoir traiter le suivant dans la file d'attente. Pour s'assurer qu'un bloc de code s'exécute après la fin du callback, celui-ci doit être appelé à partir de la fonction onSuccess()
méthode.
Voici une explication technique de la façon dont cela fonctionne dans un environnement à un seul thread (trouvé aquí de Thomas Broyer) :
GWT-RPC fait usage de RequestBuilder, qui est basé sur XMLHttpRequest. XMLHttpRequest (XHR) utilise des événements pour communiquer en retour avec le code, donc tout ce qui se passe sur un XHR résulte en un événement poussé sur le code. dans la file d'attente des événements, puis retiré de la file d'attente par la boucle d'événements.
Voir également le Documentation GWT .