![]() |
Выполнение через определённое время
Уважаемые форумчане, подскажите как выполнить действие через определённое время?
пробовал setInterval, но действие у меня повторяется каждые n cекунд, а нужно однократное выполнение. В частности, хочу сделать переход на ссылку через 10 секунд, как это оформить на AS3? ниже мой код. Переход на localhost происходит через каждые 5 секунд, а нужно один раз.. Код AS3:
|
setInterval Возвращает uint — Уникальный числовой идентификатор отложенного процесса. Используйте этот идентификатор для отмены процесса, вызвав метод clearInterval().
А вообще рекомендуется пользоваться классом Timer. Там, кстати, вызов с явным аргументом опр. кол-во срабатываний. |
Для однократного исполнения можно воспользоваться setTimeout
|
Цитата:
то ли они сделаны просто для соблюдения ECMA, то ли оставлены как атавизм прошлых версий, то ли просто не надежны, что то такое ) В общем почему не помню, но не пользуюсь этими штуками ) |
Цитата:
|
Цитата:
Цитата:
Цитата:
|
А почему не рекомендуется никто не объяснит?
Слышал только весьма расплывчатые рассуждения. |
Ну, насколько я помню, обе функции являются обертками вокруг обычного Timer. Зачем мне обертка, если я могу использовать сам Timer?
И второе - что таймер каждый раз создается заново (на каждый вызов setTimeout или setInterval) - а это плохо с точки зрения потребляемых ресурсов |
Ну как вариант, вместо setTimeout, можно свою обвертку с пулом таймеров написать.
|
Можно запустить таймер на 10 секунд, а при срабатывании удалить слушатель.
Еще такая штука есть, может пригодиться. |
Цитата:
Код AS3:
|
Это выглядит не так. setInterval / setTimeout функции пакета.
|
Цитата:
|
Есть такой класс:
Код AS3:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Где там обертка? SetIntervalTimer расширяет класс Timer. setInterval создает его экземпляр, получает id и завершается.
Что в вашем понимании "обертка"? |
Именно
|
Что именно?
|
alatar, в известном смысле функция и не может быть оберткой над классом =) Паттерн wrapper тут никаким боком не имелся ввиду.
|
Цитата:
По моему setTimeout это яркий пример функции обертки, не? Приведите тогда свой пример чтобы я понял. |
в какие-то дебри полезли... :)
|
Цитата:
И вы, строго говоря, не правы. "Обертка" здесь допустимо как вольное описание. Но вообще-то обертка маскирует, либо специфицирует объект для использования. А данные функции (кстати до вашего примера не видел описания этого класса, спасибо) создают и используют экземпляры объекта. |
Цитата:
Цитата:
|
Inet_PC, а вы его (определение) прочитали?
setInterval создает объект и далее в его жизни уже никак не участвует и повторно получить доступ к этому объекту она не может. Если считать конструктор обычной функцией, то можно было бы и притянуть за уши определение "обертка". Добавлено через 4 минуты Вот clearInterval еще можно назвать оберткой, т.к. она маскирует вызов статической функции. |
Функция будет оберткой, когда сможет повторно получать доступ к какому-то объекту?
|
Это следует из приведенной вами статьи.
|
Наверное я не врубаюсь, почему функция тупо (или почти тупо) вызывающая системную - это функция обертка, а setTimeout нет?
|
Что делает обертка? Не важно для функции или объекта, смысл один. Оберка "оборачивает" (извиняйте за тавтологию) объект или функцию и подменяет его (ее) интерфейс на свой. Например, у нас есть супер-универсальная функция у которой 100500 параметров на все случаи жизни, а нам надо 100500 раз в 100500 местах вызвать эту функцию с одними и теми же параметрами, за исключением одно двух. Мы пишем функцию обертку, которая подставит нужные параметры и будет принимать не 100500 аргументов, а два или один.
Что делает setInterval? Создает новый объект и передает ему коллбек. При этом, функции которая делает тоже самое не существует и это не обертка для метода существующего объекта. Слегка похоже на фабричную функцию, только возвращает не объект, а id. |
А ну теперь понятнее, т.е. если бы был метод setInterval у таймера с кучей параметров, тогда это была бы обертка так? Ну мне кажется, что с натяжкой это тоже обертка, не? Мы же уменьшили количество передаваемых параметров на один (repeatCount 0 или 1)?
|
Да, тогда это было бы оберткой..
|
| Часовой пояс GMT +4, время: 07:46. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.