請問關於方法不同步的問題

2 views
Skip to first unread message

Hoskie

unread,
Nov 4, 2009, 4:22:03 AM11/4/09
to 台灣 Adobe 使用者俱樂部
以下B執後arr = a.getArray();會出錯因為A的loadCompleteHandler還沒執行完畢,
但是在註解1的地方加上this.dispatchEvent(new Event(Event.COMPLETE));
然後在B等待A發出事件就可以正常,
另外用setInterval的方法一直待到A完成也可以.

請問兩種方法哪個比較好,或是有其他更方便的方法,因為這樣真的很麻煩。 謝謝

// ========Class A=============
public class A{
var array:Array;
var ldr:URLLoader;
public function A(){
array = new Array();
ldr = new URLLoader();
ldr.addEventListener(Event.COMPLETE, loaderCompleteHandler);
ldr.load(new URLRequest("xml/vocabulary.xml"));
}
function loaderCompleteHandler(event:Event):void{
var xml:XML = XML(ldr.data);
for each(var s:String in xml.elements()){
array.push(s);
}
//==================註解1====================//
}
function getArray():Array{
return array;
}
}

// ========Class B=============
public class B{
var arr:Array;
var a:A;
public function B(){
a = new A();
arr = a.getArray();
trace(arr);
}
}

Ben Chang

unread,
Nov 4, 2009, 4:43:54 AM11/4/09
to au...@googlegroups.com
dispatchEvent 比較好,因為你不會知道 xml 要 load 多久,setInterval 要停多久


1. B 聽 A 做好沒 --> 就是你說的 dispatchEvent 的作法
2. B 告訴 A 作好時請執行 B 的 doSomething() --> 將 B 的 doSomething 當作參數帶進 A
class A{
  var _callback:Function;

  function loadxml(callback:Function){
    _callback = callback;
    ... 載入 xm
  }

  function onLoaded(e:Event){
    ... 得到 ary
    _callback(ary);
  }
}

class B{

  function B(){
    a = new A();
    a.loadxml(doSome);
  }

  function doSome(ary:Array){
  }
}
不過與其用這種方法,我還是會用方法 1.

因為你要盡可能地讓 A 與 B 互不認識,以這個例子來說至少 A 不用認識 B,以免未來牽一髮動全身,
也要盡可能讓互相的參考達到最少,譬如在 A 中沒必要留一個 B 的 function 的參照,以免 GC 時無法釋放資源

所以,別怕麻煩~



2009/11/4 Hoskie <skin...@gmail.com>

Hoskie

unread,
Nov 4, 2009, 9:25:08 AM11/4/09
to au...@googlegroups.com
非常感謝.

2009/11/4 Ben Chang <ben.rb...@gmail.com>:
> 所以,別怕麻煩~

Reply all
Reply to author
Forward
0 new messages