Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么我的函数不返回我期望的数据?_Arrays_Actionscript 3 - Fatal编程技术网

Arrays 为什么我的函数不返回我期望的数据?

Arrays 为什么我的函数不返回我期望的数据?,arrays,actionscript-3,Arrays,Actionscript 3,这是我的代码,从文本文件创建数组。如果我在函数“onload”中跟踪它,我会看到我的数组。但它在函数外不返回任何内容。为什么? var myTextLoader:URLLoader = new URLLoader(); var myArray:Array = new Array(); myTextLoader.load(new URLRequest("list.txt")); myTextLoader.addEventListener(Event.COMPLETE, onLoaded);

这是我的代码,从文本文件创建数组。如果我在函数“onload”中跟踪它,我会看到我的数组。但它在函数外不返回任何内容。为什么?

var myTextLoader:URLLoader = new URLLoader();
var myArray:Array = new Array();


myTextLoader.load(new URLRequest("list.txt"));
myTextLoader.addEventListener(Event.COMPLETE, onLoaded);

function onLoaded(e:Event) {
     myArray = e.target.data.split(/\n/);
     // if trace(myArray); here - I see my array.    
}

trace(myArray); // - output is clear, also it can't define a property, if I'm looking for .length

它在函数外不返回任何内容的原因是它没有数据。这是因为数据尚未加载到数组中。当数据尚未保存时,函数外部的
trace(myArray)
将立即执行,但函数内部的
trace(myArray)
是一个回调函数,在
urloader
上的
load
函数完成时执行,当您已加载文件并因此具有数据时。

这是程序中发生的事件顺序:

  • 正在创建myArray

  • myTextLoader开始加载contents list.txt

  • myTextLoader中添加了一个事件侦听器,这将导致在list.txt加载完成时执行一个函数

  • 您可以跟踪myArray的内容。myArray中当前没有任何内容

  • myTextLoader完成加载list.txt

  • 调用onload函数

  • 数据被添加到myArray


  • 总之,当您试图跟踪myArray时,它是空的。如果要等到list.txt的内容添加到数组中,那么只需将循环放入onload函数中即可

    选项1:

    var myTextLoader:URLLoader = new URLLoader();
    var myArray:Array = new Array();
    
    
    myTextLoader.load(new URLRequest("list.txt"));
    myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
    
    function onLoaded(e:Event) 
    {
         myArray = e.target.data.split(/\n/);
         for (var i:int = 0; i < myArray.length; i++)
         {
              trace(myArray[i]);
         }  
    }
    
    public class Main extends MovieClip
    {
        public var myArray:Array = new Array();
    
        public function Main() 
        {
            var myTextLoader:URLLoader = new URLLoader();
    
            myTextLoader.load(new URLRequest("list.txt"));
            myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
    
            function onLoaded(e:Event) 
            {
                 myArray = e.target.data.split(/\n/);
            }
        }
    
        public function myArrayLoopFunction()
        {
            for (var i:int = 0; i < myArray.length; i++)
            {
                trace(myArray[i]);
            }  
        }
    }
    
    var myTextLoader:URLLoader=newurlloader();
    var myArray:Array=newarray();
    加载(新的URL请求(“list.txt”);
    myTextLoader.addEventListener(Event.COMPLETE,onLoaded);
    已加载函数(e:事件)
    {
    myArray=e.target.data.split(/\n/);
    for(变量i:int=0;i

    如果以后需要从另一个函数访问数组,一种解决方案是将数组存储在范围更大的变量中。在下面的示例中,在执行onload函数之后,您可以从MyArrayLopFunction()访问数组

    选项2:

    var myTextLoader:URLLoader = new URLLoader();
    var myArray:Array = new Array();
    
    
    myTextLoader.load(new URLRequest("list.txt"));
    myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
    
    function onLoaded(e:Event) 
    {
         myArray = e.target.data.split(/\n/);
         for (var i:int = 0; i < myArray.length; i++)
         {
              trace(myArray[i]);
         }  
    }
    
    public class Main extends MovieClip
    {
        public var myArray:Array = new Array();
    
        public function Main() 
        {
            var myTextLoader:URLLoader = new URLLoader();
    
            myTextLoader.load(new URLRequest("list.txt"));
            myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
    
            function onLoaded(e:Event) 
            {
                 myArray = e.target.data.split(/\n/);
            }
        }
    
        public function myArrayLoopFunction()
        {
            for (var i:int = 0; i < myArray.length; i++)
            {
                trace(myArray[i]);
            }  
        }
    }
    
    public类Main扩展了MovieClip
    {
    public var myArray:Array=new Array();
    公共功能Main()
    {
    var myTextLoader:URLLoader=新的URLLoader();
    加载(新的URL请求(“list.txt”);
    myTextLoader.addEventListener(Event.COMPLETE,onLoaded);
    已加载函数(e:事件)
    {
    myArray=e.target.data.split(/\n/);
    }
    }
    公共函数MyArrayLopFunction()
    {
    for(变量i:int=0;i
    Oy,请不要使用txtspeak。谢谢您的回答。但实际上我的主要任务是在数组中使用循环。但是我的循环什么也没有返回。如何使用循环?我应该设置计时器吗?或者在这种情况下人们通常做什么?我应该在手册中读些什么呢?我的帖子现在更新了,包括两种在数组中循环的方法。这两者都有可能解决您的问题,具体取决于您的问题是什么。两个都试一下,如果其中一个不能用,告诉我。至于AS3文档,我想您可以阅读。Pikamander 2非常感谢!:D现在我记得我在课程中见过很多次这个“把戏”。。。是的,总是把所有东西都封装在函数中,然后调用它们。现在我知道了什么是:D。我从onload函数调用了MyArrayLopFunction(),它成功了。非常感谢你!