Arrays 为什么我的函数不返回我期望的数据?
这是我的代码,从文本文件创建数组。如果我在函数“onload”中跟踪它,我会看到我的数组。但它在函数外不返回任何内容。为什么?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);
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时,它是空的。如果要等到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(),它成功了。非常感谢你!