使用URLLoader时,可能会出现两种类型的错误:可以在try {}块中捕获的异常以及可以由处理程序函数处理的错误事件。

发生异常/错误事件后,是否应该在URLLoader对象上调用close()?

最佳答案

有趣的问题-我尝试了一下此代码,却没有得到您期望的错误(流错误):

var urlLoader:URLLoader = new URLLoader();

urlLoader.load( new URLRequest("http://stackoverflow.com/test.jpg") );
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, error);

function error(e:IOErrorEvent):void
{
    // Don't get the stream error, meaning the stream is still open.
    urlLoader.close();
}

然后我心想,也许它会在半秒钟后关闭,所以我在close调用上附加了setTimeout()。仍然没有得到错误。
function error(e:IOErrorEvent):void
{
    setTimeout(function()
    {
        // Still no error.
        trace("Test.");
        urlLoader.close();

    }, 3000);
}

为了再次检查,我运行了此命令以确保我们仍然实际收到该错误:
var urlLoader:URLLoader = new URLLoader();
urlLoader.close(); // Error: Error #2029: This URLStream object does not have
                   // a stream opened.

因此,如果出现错误,似乎您实际上确实需要.close()一个流。真奇怪也就是说,我仍然难以置信,因此我欢迎任何反对这一事实的证据。

09-28 12:22