这是我的代码,从文本文件创建一个数组。如果我在函数“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
答案 0 :(得分:0)
它在函数外部没有返回任何内容的原因是它没有数据。那是因为数据尚未加载到数组中。函数外部的trace(myArray)
将在数据尚未保存时立即执行,但函数内部的trace(myArray)
是load
函数在{URLLoader
函数执行时执行的{{1}} 1}}完成后,当你加载文件,因此有数据。
答案 1 :(得分:0)
这是您的计划中发生的事件的顺序:
正在创建myArray。
myTextLoader开始加载内容list.txt。
将一个事件监听器添加到myTextLoader中,这将导致在list.txt加载完成后执行一个函数。
您可以跟踪myArray的内容。 myArray目前没有任何内容。
myTextLoader完成加载list.txt
onLoaded函数名为
数据已添加到myArray
总结一下,当你试图追踪它时,myArray是空的。如果你想等到list.txt的内容被添加到数组中,那么只需将你的循环放入onLoaded函数中。
选项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]);
}
}
如果稍后需要从另一个函数访问该数组,一种解决方案是将数组存储在具有更大范围的变量中。在下面的示例中,在执行onLoaded函数之后,您可以从myArrayLoopFunction()访问该数组。
选项2:
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]);
}
}
}