Salve a tutti.
Essendo abituato a programmare con funzioni e metodi sincronizzati, ora che lavoro in flash sono incappato in un piccolo problema a causa del sistema asincrono con l'httpservice.
Sto cercando di leggere dei dati da un file php con l'httpservice e fin qui nessun problema, mi riesce. Il problema nasce quando mando il send dentro una funzione che deve ritornare il valore letto del file con l'httpservice. So che voi direste, usa il result, ma non risolve il mio problema, vi faccio un esempio.
Il sistema che trovo sempre in giro, e quello che mi consigliereste voi, è il seguente e ve lo scrivo rapidamente anche se il codice non è corretto, illustro solo l'algoritmo:
Code:
public function prendi_dato_da_file():void
{
	//creo varibile HTTPService di nome httpService
	//gli metto tutti i parametri che gli servono e l'url
	//e lo mando a lavorare con send()
	var httpService:HTTPService = new HTTPService;
        httpService.useProxy = false;
        httpService.url = "/pippo/pluto.php";
        httpService.method = HTTPRequestMessage.GET_METHOD;
        var asyncToken : AsyncToken = httpService.send();
        asyncToken.addResponder( new AsyncResponder( onResult, onFault));
}

function onResult( e : ResultEvent, token : Object = null ) : void
{
       // fai qualcosa con il risultato
}

function onFault( info : Object, token : Object = null ) : void
{
        // visualizza l'errore
}
Questo sistema funziona, ma quello che serve a me è fare in modo che la funzione prendi_dato_da_file() ritorni un valore in base al dato letto. ovvero:
Code:
public function prendi_dato_da_file():String
{
	//creo varibile HTTPService di nome httpService
	//gli metto tutti i parametri che gli servono e l'url
	//e lo mando a lavorare con send()
	var httpService:HTTPService = new HTTPService;
        httpService.useProxy = false;
        httpService.url = "/pippo/pluto.php";
        httpService.method = HTTPRequestMessage.GET_METHOD;
        var asyncToken : AsyncToken = httpService.send();
        asyncToken.addResponder( new AsyncResponder( onResult, onFault));
	
	return dato;
}

function onResult( e : ResultEvent, token : Object = null ) : void
{
	// fai qualcosa con il risultato
	// memorizza risultato su dato
}

function onFault( info : Object, token : Object = null ) : void
{
        // visualizza l'errore
}
Ovviamente il return non sarà mai il dato letto perchè verrà letto sempre dopo il return. Come posso fare? Soprattutto è fattibile fare in modo che la funzione non vada avanti finchè non è finito onResult()?
Se dovessi usare il primo sistema, dovrei creare un richiamo ad una funzione per potergli dire che è pronto, ma funzionerebbe solo per quella situazione che potrebbe essere benissimo usata solo una volta in tutto il programma. Io invece vorrei evitare questo spreco e soprattutto scrivere codice poco "adattabile" ed avere una semplice funzione che quando richiamata dall'applicazione ritorna il valore letto, anche perchè l'applicazione non ha comunque nulla da fare nel frattempo, quindi posso benissimo fermarla, ma come? è possibile realizzare questa cosa?
Grazie.