为什么有两种不同的包装:flash.errors.IOError和flash.events.ioerrevent

为什么有两种不同的包装:flash.errors.IOError和flash.events.ioerrevent,flash,actionscript-3,Flash,Actionscript 3,我试图“故意”抛出一个错误,试图访问错误的URL,如下所示: try { var myData:URLRequest = new URLRequest("http://www.abc.com/"); myData.method = URLRequestMethod.POST; var vars:URLVariables = new URLVariables(); var loader:URLLoader = new URLLoader(); loader.load(my

我试图“故意”抛出一个错误,试图访问错误的URL,如下所示:

try 
{
var myData:URLRequest = new URLRequest("http://www.abc.com/");
myData.method = URLRequestMethod.POST;
var vars:URLVariables = new URLVariables();

var loader:URLLoader = new URLLoader();
 loader.load(myData); 
}
catch(e:Error)
{
   trace("Yess!, caught it!");
}
以上代码,无法捕获任何错误

后来我发现,有两个包如下:

try 
{
var myData:URLRequest = new URLRequest("http://www.abc.com/");
myData.method = URLRequestMethod.POST;
var vars:URLVariables = new URLVariables();

var loader:URLLoader = new URLLoader();
 loader.load(myData); 
}
catch(e:Error)
{
   trace("Yess!, caught it!");
}
flash.errors.IOError

flash.events.IOErrorEvent

所以我发现它应该有一个addEventListener,如下所示: loader.addEventListener(IOErrorEvent.IO_ERROR,ErrorOccurd)

但这让我想知道,为什么我要听一个事件来判断错误。为什么我不能利用“捉迷藏”呢。为什么有两种错误处理方式,一种是通过尝试,另一种是通过侦听事件来捕获?

谢谢
V.

您不能在URLLoader加载方法上使用try-catch,因为加载方法是异步工作的;在下载完成之前,代码执行不会暂停。这是Flash Player引擎的典型工作方式。可能失败的异步方法将调度错误事件,而可能失败的同步方法将抛出异常。

您不能在URLLoader load方法上使用try catch,因为load方法是异步工作的;在下载完成之前,代码执行不会暂停。这是Flash Player引擎的典型工作方式。可能失败的异步方法将调度错误事件,而可能失败的同步方法将抛出异常