如何从同一地点保持并继续FOR-LOOP

时间:2011-09-06 10:46:34

标签: flex actionscript-3 for-loop facebook-fql

大家好我有一个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很多,我真的在这里制动我的头!

2 个答案:

答案 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();