Я, конечно, не говорю, что это лучший выход, и уж тем более продуктивный, но можно использовать аналогичные классы для всех случаев жизни:

Код:
class Timer{
private var _id : Number;
private var _interval : Number = 1000;
private var _active : Boolean = false;
public var _loop : Boolean = true;
public function get id():Number { return(this._id) }
public function set interval(_value:Number):Void {
if (not isNaN(_value)){
this._interval=_value;
if (this._active){ this.Reload() }
}
}
public function get interval():Number { return this._interval }
public function set active(_value:Boolean):Void {
if (_value){ this.StartTimer() } else { this.StopTimer() }
}
public function get active():Boolean { return this._active }
public function onTimer(){}
private function onUpdate(){
this.onTimer();
if (not this._loop) { this.StopTimer(); }
}
private function StopTimer():Void {
this._active=false;
clearInterval(this._id);
}
private function StartTimer():Void {
this._active=true;
clearInterval(this._id);
this._id = setInterval(this,"onUpdate",this._interval);
}
public function Reload():Void {
this.StopTimer();
this.StartTimer();
}
function Timer(val_interval, val_active) {
this._interval=val_interval;
if (val_active) { this.StartTimer() }
}
}
Использование:

Код:
var T:Timer = new Timer(300, true);
T.loop = false;
T.onTimer = function (){
//делать что-то
}
PS. За простоту не ругайте (написал за 15 минут

), зато функционально, а loop параметр можно заделать числовым, и назначать количество повторяемых раз.