大家好我有一个for / foreach循环调用其中的函数。问题是被调用的函数在循环再次出现之前没有完成它的工作/
这是我的代码:
private function ziv(result:Array,fail:Object):void
{
var i:uint = result.length;
for each(var f:Object in result)
{
var item:Object = f;
notfriend=item;
FacebookDesktop.fqlQuery("SELECT uid1, uid2 FROM friend WHERE uid1 = me() AND uid2 = "+item.id,myfriends);
}
}
private function myfriends(result:Object,fail:Object):void
{
if (result.length != 0)
myfriend.addItem(notfriend);
}
如你所见,我想在MYFRIENDS函数中添加一个项目(notfriend),在循环中定义“notfriend”,但是当“MYFRIENDS”函数完成加载时,项目已经改变到下一个项目即使我最初是指上一个项目。 有没有办法可以保持FORloop直到“myfriends”功能完成加载。
我想在“myfriends”函数上使用Eventlistener,但是我该怎么做才能停止\抓住循环?我所知道的就是BREAK--它会破坏FOR-LOOP和CONTINUE - 它会从下一次迭代中继续循环。
10x很多,我真的在这里制动我的头!
答案 0 :(得分:0)
也许看看没有使用for循环并手动循环(下面的示例使用递归)
即
private var index=0;
private function processArray() {
proccessArrayItem(array[index])
}
private function proccessArrayItem(obj) {
//after complete then call function recursively
index++;
if (index<array.length) proccessArrayItem(array[index])
}
答案 1 :(得分:0)
在某些情况下你可以使用递归函数
喜欢
private function setZoom():void
{
var zoomLevel:Number = new Number(myPanel);
if(zoomLevel != 100)
{
if(zoomLevel < 100)
{
myPanel.zoomIN();
setZoom();
}
else
{
myPanel.zoomOUT();
setZoom();
}
}
}
但有些情况我们不能这样做
我们只能通过
实现一个解决方案使用Timer函数
setTimeout()或callLater();