Есть ли функция сна в flex? - PullRequest
5 голосов
/ 21 марта 2012

Я хочу, чтобы мой код подождал пару секунд перед выполнением.Так есть ли функция, похожая на сон во флексе?

Ответы [ 4 ]

16 голосов
/ 21 марта 2012

В ActionScript нет функции сна или задержки.Как и в JavaScript, вы можете использовать setTimeout() вместо этого следующим образом:

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

Как только вы связываете функцию trigger() с любым событием, например, «щелчком», когда событие происходит, окно предупреждения появляется после 1с.

Также есть функции setInterval() и clearlnterval(), которые вы можете использовать для повторения.Однако в этом случае рекомендуется использовать класс flash.utils.Timer.

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 голосов
/ 21 марта 2012

В ActionScript нет функции сна.Все работает в одном потоке, поэтому он также блокирует все взаимодействия с пользовательским интерфейсом, что обычно считается плохим способом.

Ближайшим вариантом является использование класса Timer, который будет запущен только в рассматриваемой функции, и "запуск" кода, который вы хотели подождать после завершения его ожидания 2 секунды.функция:

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;
}
2 голосов
/ 21 марта 2012

Это всегда зависит от того, что вы пытаетесь сделать.

Я вижу, вы используете Flex.В Flex есть замечательная функция, называемая callLater, которая реализована в UIComponent.Он похож на используемый setTimeout, но функция будет автоматически вызываться при следующем цикле обновления вместо установленного интервала времени.Предположим, вы установили некоторые данные в сетку данных и что выбрать конкретную ячейку / строку в нем.Вы будете использовать callLater, чтобы сетка данных успела обработать данные.Вот пример:

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

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

Если вы просто хотите отложить выполнение один раз, setTimeout - это путь.Если вы хотите выполнить что-то более одного раза через определенные интервалы, действительно используйте Timer.

Если это реагирует на какое-то действие, например, функцию удаленного сохранения, я предлагаю вам использовать события вместо этого и прослушивать что-то вроде SAVE_COMPLETEсобытие.

0 голосов
/ 06 июля 2012

Что если бы мне пришлось выполнить кнопку таймера, как в следующем состоянии? У меня есть одно событие клика по карте, которое показывает информацию в окне карты. Мне нужно получить информацию из базы данных между ними. Теперь, чтобы показать извлеченную информацию во всплывающем окне с информацией, требуется время.

Я думаю, что лучше переключать сон или таймер между щелчком карты и всплывающим окном информации, чтобы можно было просмотреть извлеченные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...