Domanda

Sono stato incaricato con la creazione di un client AS3 per un server di HTML5 WebSocket.

Il mio pensiero iniziale è quello di creare questo servizio utilizzando alcune delle classi esistenti in AS3, vale a dire il tentativo di emulare RemoteObject, ma dopo aver guardato dentro, non posso davvero vedere il punto del ASyncToken!

capisco il token viene utilizzato come una qualche forma di riferimento tra la chiamata del server e la sua risposta, ma non riesco proprio a vedere dove / come si diventa un identificatore univoco.

Prendete questo breve pezzo di codice, ad esempio:

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

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

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

Ovviamente il token ha il suo responder, e il servizio può mantenere un dizionario dei gettoni-messaggi, ma se dovessi chiamare myService.myCall due volte, prima che uno risponde, sarebbe il know servizio che token per associare la risposta con? Funziona il servizio creare un identificatore univoco per associare la schiena risposta al token, o sarebbe riuscire in queste circostanze?

Se non internamente memorizza il proprio identificativo univoco per le chiamate, come sarebbe meglio di saltare del tutto il token e passando il risponditore nei parametri di chiamata? Per es.

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

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

 function onFault(event:FaultEvent) {
   // do stuff
 }
È stato utile?

Soluzione

Due cose spiccano:

  1. È possibile assegnare più di un risponditore ad un AsyncToken;
  2. È possibile associare il risultato del AsyncToken.

Si può trovare queste due cose utili a seconda del tipo di dati che si sta lavorando con ... Inoltre ci potrebbe essere qualcosa di più questo.

Altri suggerimenti

Per applicazioni più complicate, l'AsyncToken ti permette di avere un po 'più di flessibilità in quello che funzioni / chiusure / metodi per la ricezione di dati, o errori di manipolazione.

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top