Frage

Ich habe mit der Schaffung eines AS3-Client beauftragt worden für einen HTML5 WebSocket-Server.

Mein anfängliches Denken ist, diesen Dienst zu schaffen einige der bestehenden Klassen in AS3 verwenden, nämlich den Versuch RemoteObject- zu emulieren, aber in sie sah, kann ich nicht wirklich den Punkt der AsyncToken sehen!

Ich verstehe das Token als irgendeine Form von Referenz zwischen dem Server Ruf und seiner Reaktion verwendet wird, aber ich kann einfach nicht sehen, wo / wie es eine eindeutige Kennung wird.

Nehmen Sie dieses kurzes Stück Code zum Beispiel:

 var token:AsyncToken = myService.myCall(params);
 news.addResponder(new Responder(onResult, onFault));

 function onResult(event:ResultEvent) {
   // do stuff
 }

 function onFault(event:FaultEvent) {
   // do stuff
 }

Offensichtlich ist der Token hat seine eigenen Responder, und der Dienst ein Wörterbuch von Token-Nachrichten halten können, aber wenn ich myService.myCall zweimal anrufen, bevor entweder reagiert, würde die Service-Know-Token, die die Antwort mit verbinden? Ist der Dienst eine eindeutige Kennung erstellen die Antwort zurück an die Token zu assoziieren, oder wäre es nicht unter diesen Umständen?

Wenn es intern für Anrufe seine eigene eindeutige Kennung speichert, wie wäre es besser sein als das Token vollständig übersprungen und den Responder in den Aufrufparametern vorbei? Z.

 myResponder = new Responder(onResult, onFault);
 myService.myCall(myIResponder, <additional params>);

 function onResult(event:ResultEvent) {
   // do stuff
 }

 function onFault(event:FaultEvent) {
   // do stuff
 }
War es hilfreich?

Lösung

Two things stand out:

  1. You can assign more than one responder to an AsyncToken;
  2. You can bind the result of the AsyncToken.

You might find these two things useful depending on what kind of data you're working with... Also there might be more to it than this.

Andere Tipps

For more complicated applications, the AsyncToken lets you have a bit more flexibility in what functions/closures/methods to the reception of data, or handling errors.

public function mssqlQuery(sql:String,fid:String) : void {
    var http:HTTPService = new HTTPService;
    var parm:Object = new Object;
    parm.fas_sql = sql;
    parm.fas_db = mssql_db; 
    http.url = mssql_url+"?irand="+Math.random();
    http.showBusyCursor = true;
    http.request = sql;
    http.addEventListener(ResultEvent.RESULT, mssqlResult);
    http.addEventListener(FaultEvent.FAULT, mssqlFault);
    http.method = "POST";
    sqlToken = http.send(parm);
    sqlToken.param = fid;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top