2012-03-21 16 views
5

Voglio il mio codice di attendere un paio di secondi prima di eseguire. Quindi c'è qualche funzione simile a dormire in flex?C'è una funzione sleep in flex?

+3

[Timer] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html) – RIAstar

risposta

15

non esiste una funzione di sonno o ritardo in ActionScript. Come JavaScript, è possibile utilizzare setTimeout() invece in questo modo:

function trigger():void { setTimeout(doIt, 1000); } 
function doIt():void { Alert.show("done!"); } 

Una volta che si collega la funzione trigger() a qualsiasi evento come ‘click’, quando l'evento accade finestra di avviso verrà visualizzato dopo 1 sec.

Ci sono anche le funzioni setInterval() e clearlnterval() che è possibile utilizzare per la ripetizione. Tuttavia, si consiglia di utilizzare la classe flash.utils.Timer in questo caso.

private var myTimer:Timer; 

private function init():void { 
    myTimer = new Timer(5000, 1); 
    myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerHandler); 
    myTimer.start(); 
} 

public function timerHandler(event:TimerEvent):void { 
    Alert.show("I was delayed!"); 
} 
+2

Si consiglia di fare un esempio utilizzando Timer e non setTimeout. –

+0

grazie per il feedback ho aggiornato la mia risposta. –

+1

FYI se è necessario utilizzare setTimeOut, assicurarsi di chiamare clearTimeOut o si rischia una perdita di memoria. Tuttavia, non sarei così veloce nel rispondere alla domanda qui ... Sospetto che ci sia un malinteso alla base della natura asincrona del flash/flex che altrimenti avremmo l'opportunità di chiarire. –

2

Dipende sempre da ciò che si sta tentando di fare.

vedo che si sta utilizzando Flex. Esiste una funzionalità utile in Flex chiamata callLater, che è impiantata in UIComponent. È simile a setTimeout in uso ma la funzione verrà automaticamente richiamata al ciclo di aggiornamento successivo anziché a un intervallo di tempo impostato. Supponiamo di aver impostato alcuni dati su un datagrid e su cosa selezionare una cella/riga specifica al suo interno. Utilizzerai callLater per assicurarti che il datagrid abbia il tempo di elaborare i dati. Ecco un Esempio:

protected function dummy():void 
{ 
    myComponent.callLater(myFunction, ["this is a message"]) 
} 

protected function myFunction(message:String):void 
{ 
    Alert.show(message); 
} 

Se si desidera solo per ritardare l'esecuzione una volta, setTimeout è la strada da percorrere. Se si desidera eseguire qualcosa più di una volta a intervalli definiti, utilizzare effettivamente il timer.

Se si tratta di reagire a una certa azione, come una funzione di salvataggio a distanza, vi suggerisco di utilizzare gli eventi invece e ascoltare per qualcosa come un evento SAVE_COMPLETE.

+0

+1 per menzionare almeno che gli eventi sono probabilmente il modo per risolvere il problema sottostante che l'OP sta cercando di risolvere! –

2

Non c'è alcuna funzione sleep in ActionScript. Tutto gira in un thread, quindi bloccherebbe anche tutte le interazioni dell'interfaccia utente, che è comunemente percepita come una cattiva strada da percorrere.

L'opzione più vicina è utilizzare la classe Timer che verrà avviata solo nella funzione in questione e "attiva" il codice che si desidera attendere dopo il completamento della sua attesa di 2 secondi.

in funzione:

private function whereWeStartTimer():void{ 
    //misc code that you always execute before starting your timer 

    var timer:Timer = new Timer(2000); // 2 second wait 
    timer.addEventListener(TimerEvent.TIMER,functionTimerFlagged); 
    timer.start(); 
} 

private function functionTimerFlagged(event:TimerEvent):void{ 
    var targetTimer:Timer = event.target as Timer; 
    targetTimer.removeEventListener(TimerEvent.TIMER,functionTimerFlagged); 
    targetTimer.stop(); 

    //put your code here that you wanted to execute after two seconds 

    //force-ably destroy timer to ensure garbage collection(optional) 
    targetTimer = null; 
} 
0

Che cosa succede se ho dovuto eseguire il pulsante del timer come nella seguente condizione? Ho un evento click sulla mappa che mostra informazioni sulla finestra della mappa. Ho bisogno di recuperare informazioni da DB in mezzo. Ora per mostrare le informazioni recuperate nel popup di informazioni, ci vuole tempo.

penso che il suo meglio per indurre un sonno o il timer tra cartina fare click e info popup, in modo che i dati recuperati possono essere visualizzati.