How do I wait until data is loaded?

I have two classes: Level, which dictates a tile-based level, and MapLoader, which loads a text file on my local machine.

I am calling a load function through Level asking MapLoader to load, but when I try to parse the data, MapLoader isn’t done with the load.

I’ve tried putting the load in a while loop, but it just freezes. Here’s the MapLoader and the function in Level.

MapLoader:

package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.net.*;
	public class MapLoader extends Sprite {
		private var source:String;
		private var dataFormat:String=URLLoaderDataFormat.TEXT;
		private var mapData:String;

		public function MapLoader(s:String) {
			source = "maps\\"+s;
			mapData = "";
			var loader:URLLoader = new URLLoader();
			loader.dataFormat=dataFormat;
			configureListeners(loader);
			var request:URLRequest=new URLRequest(source);
			try {
				loader.load(request);
			} catch (error:Error) {
				trace("Error loading requested document: " + source);
			}
		}

		private function configureListeners(dispatcher:URLLoader):void {
			dispatcher.addEventListener(Event.COMPLETE, completeHandler);
			dispatcher.addEventListener(Event.OPEN, openHandler);
			dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
			dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
			dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
			dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
		}
		
		public function GetMapData():String {
			return mapData;
		}
		
		private function completeHandler(event:Event):void {
			var loader:URLLoader=URLLoader(event.target);
			/*
			switch (loader.dataFormat) {
				case URLLoaderDataFormat.TEXT :
					trace("completeHandler (text): " + loader.data);
					break;
				case URLLoaderDataFormat.BINARY :
					trace("completeHandler (binary): " + loader.data);
					break;
				case URLLoaderDataFormat.VARIABLES :
					trace("completeHandler (variables): " + loader.data);
					break;
			}
			//*/
			trace("Done loading.");
			mapData = loader.data;
		}

		private function httpStatusHandler(event:Event):void {
			trace("httpStatusHandler: " + event);
		}

		private function ioErrorHandler(event:IOErrorEvent):void {
			trace("ioErrorHandler: " + event);
		}

		private function openHandler(event:Event):void {
			trace("openHandler: " + event);
		}

		private function progressHandler(event:ProgressEvent):void {
			trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
		}

		private function securityErrorHandler(event:SecurityErrorEvent):void {
			trace("securityErrorHandler: " + event);
		}
	}
}

Level.LoadMap

		public function LoadMap(s:String):void {
			var ml:MapLoader=new MapLoader(s);
			var rawData:String;
			rawData=ml.GetMapData();
			LevelData=rawData.split(/[,
]/);
			trace(LevelData);
		}

Any idea?