2012-06-04 72 views
0

我寫了一個遞歸調用的函數。我維護了一個數組,其中的值與事件的偵聽器一起推送。但問題是函數首先返回而沒有數組增量,並且稍後執行偵聽器。在flex中使用事件監聽器的遞歸函數4

public function getAllChilds(seltem:XML, allChilds:Array): Array 
{ 
    if(//the childs of selected item if need to retrive from server)        
    var viewChildrenJobsService : HTTPService = new HTTPService(); 
    viewChildrenJobsService.url = // here is my url ; 

viewChildrenJobsService .addEventListener(ResultEvent.RESULT, function(event:ResultEvent):void { 
    // now on this result event i got all childs of selected item. 
    for each(var childJob :XML in seltem.children())  
    { 
     allChilds.push(childJob); 
      if (//the childs of childJob need to retrive from server) 
      allChilds = getAllHierarchicalChilds(childJob, allChilds); 
    } 
}); 

return allChilds; 
} 

有沒有什麼辦法可以解決這個問題,讓函數在事件完成後返回?

回答

0

好的,你在結果事件之前返回allchilds。你刪除原來的問題;),所以我不記得你的問題是否是這樣。 嘗試拆分函數:首先請求,然後獲取allChild的值。

並且是...更好地編寫(並粘貼)格式良好的代碼:它更易於理解。

+0

是的。現在我已經分解了這個功能,但我仍然面臨同樣的問題。該函數首先在添加元素之前返回allChild(爲null)。我調試了它,但發現事件後來被捕獲。 – shekhar681

+0

當然事件將在稍後處理。你不能這樣做。我不知道你想達到什麼,但我建議你閱讀[數據提供商](http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7fb8.html)和[使用HTTPService與xml](http://help.adobe.com/en_US/Flex/4.0/AccessingData/WS2db454920e96a9e51e63e3d11c0bf69084-7fdd.html#WS2db454920e96a9e51e63e3d11c0bf69084-7b7a)。或者如果你會更具體,也許我們將能夠幫助你。 – Art

+0

單獨拆分函數不工作:在結果處理程序中,必須在設置allChilds之後調用第二個函數。請轉發問題 –