В классе А регистрируем обработчик для события

Код AS3:
private function func():void
{
mapLoader = new Loader();
mapLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, mapComplete);
mapLoader.load(new URLRequest(url));
}
private function mapComplete(e:Event):void
{
trace("do something");
}
В неком классе В есть обработчик enterFrame и мувиклип:

Код AS3:
private function BEnterFrame(e:Event):void
{
trace("начало");
mc.nextFrame();
trace("конец");
}
Так вот, вызываем func(), потом вызывается обработчик BEnterFrame. После выполнения mc.nextFrame(); начинает выполняться mapComplete(e:Event), а только потом продолжает выполняться BEnterFrame(e:Event)
Результат получается такой:
trace("начало");
trace("do something");
trace("конец");
Понять не могу, каким это способом nextFrame() генерирует событие Event.COMPLETE у mapLoader.contentLoaderInfo
Добавлено через 1 час 31 минуту
Можно даже все немного упростить. Вот весь код

Код AS3:
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
public class Main extends Sprite
{
private var loader:Loader;
private var mc:MovieClip;
public function Main():void
{
trace("entry point");
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest("road.swf"));
mc = new MovieClip();
mc.addEventListener(Event.ENTER_FRAME, onEnterFrameListener);
}
private function onComplete(e:Event):void
{
trace("onComplete");
loader.removeEventListener(Event.COMPLETE, onComplete);
}
private function onEnterFrameListener(e:Event):void
{
trace("onEnterFrameListener: start");
mc.nextFrame();//prevFrame(); gotoAndStop(); gotoAndPlay();
trace("onEnterFrameListener: end");
}
}
}
Результат:
...
onEnterFrameListener: start
onComplete
onEnterFrameListener: end
...