Synchrone RPC-Aufrufe in GWT

8

(Dieser Titel allein sollte die Leute dazu bringen, aus dem Holzwerk zu kommen, um mich mit Keulen zu schlagen, aber hört mich an).

Ich habe einen Anwendungsfall, bei dem ich einen Wert aus einem asynchronen Aufruf zurückgeben muss. (Ich benutze GWT-Plattform, aber die Konzepte sind die gleichen.) Ich deklarierte eine endgültige JavaScriptObject-Array, dann den Wert innerhalb der AsyncCallback zugewiesen. Allerdings muss ich den Wert zurückgeben und die Methode wird zurückgegeben, bevor der AsyncCallback abgeschlossen ist. Daher muss ich irgendwie blockieren, bis der AsyncCallback abgeschlossen ist. Ich brauche den zurückgegebenen Wert in einer anderen Methode, oder ich würde nur tun, was ich in onSuccess () benötigen.

Ich habe Schleifen, Timer und ein paar andere Methoden ohne Glück versucht. Kann jemand helfen?

%Vor%

UPDATE: Wie gewünscht, hier ist der Code, der doGetWhereIAmMarker () aufruft. Ich habe versucht, eine separate native Methode mit dem Google Map-Objekt (als JavaScriptObject) als Parameter, aber es scheint, dass die Übergabe dieses Objekts zwischen nativen Methoden die Fähigkeit zur Aktualisierung des Objekts tötet.

%Vor%     
Jason 08.09.2011, 19:18
quelle

2 Antworten

3

Irgendwann musste ich etwas Ähnliches machen, aber letztendlich habe ich diesen Code zugunsten von asynchronem Zeug eliminiert. Daher kann ich nicht den genauen Code angeben, den Sie verwenden müssen, sondern nur einige Hinweise darauf, wie Sie sich nähern können.

  • Zuerst dieses Blog beschreibt, wie man synchrones AJAX mit Javascript macht.
  • Zweitens müssen Sie Synchronisierungsanrufe unterstützen. Das Problem besteht darin, dass GWT den Parameter, der synchrone AJAX-Aufrufe bereitstellt, nicht unterstützt. Höchstwahrscheinlich wollen sie seine Verwendung nicht fördern. Daher müssten Sie JSNI verwenden, um eine geeignete Methode zu XMLHttpRequest hinzuzufügen (die Sie wahrscheinlich erweitern würden) und dann zu RequestBuilder (sollte sie auch erweitern).
  • Abschließend ändern Sie Ihren Service mit erweitertem% ​​co_de%. Etwas wie
  

((ServiceDefTarget) -Dienst) .setRpcRequestBuilder (requestBuilder);

Und abschließend - aus dem gleichen Blogpost (etwas außerhalb des Kontextes):

  

Wegen der Gefahr, dass eine Anfrage verloren geht und der Browser hängt,       Synchrones JavaScript wird für nichts außerhalb von empfohlen       (onbefore) entlade Ereignishandler.

    
Alex Gitelman 08.09.2011, 20:02
quelle
0

Ich denke sein ganzes Schicksal ....
In Gwt können wir die Antwort nicht abfangen und senden, da sofort nach dem Senden der Anforderung die nächste Methode gestartet wird, ohne die Antwort zu stören Dennoch befriedigen sie uns, die Timer zu benutzen, ist was ich denke ...

%Vor%     
Ravi Chandran 27.09.2013 10:52
quelle

Tags und Links