2012-03-21 26 views

Respuesta

15

No hay función de reposo o retraso en ActionScript. Como JavaScript, puede utilizar setTimeout() lugar como esto:

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

Una vez que enlace la función trigger() a cualquier evento como un ‘clic’, cuando el evento ocurre cuadro de alerta se mostrará después de 1 seg.

También hay setInterval() y clearlnterval() funciones que puede utilizar para la repetición. Sin embargo, se recomienda utilizar la clase flash.utils.Timer en ese 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

Le recomendaría que haga un ejemplo con Timer y no con setTimeout. –

+0

gracias por los comentarios que he actualizado mi respuesta. –

+1

FYI si debe usar setTimeOut, asegúrese de llamar a clearTimeOut, o corre el riesgo de una pérdida de memoria. Sin embargo, no sería tan rápido para responder la pregunta aquí ... Sospecho que hay un malentendido subyacente de la naturaleza asincrónica de flash/flex que de otro modo tendríamos la oportunidad de aclarar. –

2

Siempre depende de lo que está tratando de hacer.

Veo que está utilizando Flex. Hay una característica clara en Flex que se llama callLater, que se implementa en UIComponent. Es similar a setTimeout en uso, pero la función se llamará automáticamente en el próximo ciclo de actualización en lugar de un intervalo de tiempo establecido. Supongamos que establece algunos datos en una cuadrícula de datos y en qué seleccionar una celda/fila específica. Utilizará callLater para asegurarse de que la cuadrícula de datos haya tenido tiempo de procesar los datos. He aquí un exemple:

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

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

Si lo que desea es retrasar una ejecución una vez, setTimeout es el camino a seguir. Si desea ejecutar algo más de una vez a intervalos definidos, use el temporizador de hecho.

Si es para reaccionar ante alguna acción, como una función de guardado remoto, sugiero que use eventos en su lugar y escuche algo como un evento SAVE_COMPLETE.

+0

+1 para al menos mencionar que los eventos son probablemente la manera de resolver lo que sucede con el problema subyacente que el OP está tratando de resolver. –

2

No hay función de reposo en ActionScript. Todo se ejecuta en un hilo, por lo que también bloquearía todas las interacciones de la interfaz de usuario, lo que comúnmente se percibe como un mal camino a seguir.

La opción más cercana es usar la clase del temporizador que solo se iniciará en la función en cuestión y "encender" el código que desea esperar después de que se complete su espera de 2 segundos.

en función de:

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

Lo que si tuviera que ejecutar el botón del temporizador como en el siguiente condición? Tengo un evento de clic de mapa que muestra información en la ventana del mapa. Necesito buscar información de DB en el medio. Ahora, para mostrar la información obtenida en la ventana emergente de información, lleva tiempo.

Creo que es mejor inducir un sueño o un temporizador entre los clics del mapa y la información emergente, por lo que se pueden mostrar los datos obtenidos.

Cuestiones relacionadas