2013-07-01 2 views
3

Lors de l'utilisation de URLLoader, deux types d'erreurs sont possibles: les exceptions qui peuvent être interceptées dans les événements try {} block et error qui peuvent être gérés par les fonctions de gestionnaire.Devrais-je appeler close() sur URLLoader après une erreur?

Dois-je appeler close() sur mon objet URLLoader après qu'un événement d'exception/erreur se produit?

Répondre

1

Question intéressante - Je donne ce code un essai et n'a pas obtenu l'erreur que vous attendez (erreur de flux):

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(); 
} 

Je me suis dit alors qu'il se ferme juste peut-être une demi-seconde plus tard, donc j'ai joint un setTimeout() à l'appel de fermeture. N'a toujours pas eu l'erreur.

function error(e:IOErrorEvent):void 
{ 
    setTimeout(function() 
    { 
     // Still no error. 
     trace("Test."); 
     urlLoader.close(); 

    }, 3000); 
} 

vérifier, je courais ce pour vous assurer que nous obtenons encore fait cette erreur:

var urlLoader:URLLoader = new URLLoader(); 
urlLoader.close(); // Error: Error #2029: This URLStream object does not have 
        // a stream opened. 

Ainsi, il semble comme si vous avez réellement besoin de .close() un flux en cas une erreur. Comme c'est bizarre. Cela dit, je suis toujours incrédule, alors je me réjouis de toute preuve contre cela.

+1

Est-il possible que 'close()' soit uniquement destiné à arrêter un téléchargement en cours, et non une méthode de "nettoyage" obligatoire? Les [docs] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html#close()) impliquent en quelque sorte ceci, mais sont laconiques et déclarent également renvoie l'erreur si "aucune URL n'est diffusée". –

Questions connexes