(轉)Flex異步令牌AsyncToken的用法介紹

什麼是AsyncToken?官方文檔是這樣描述的:"這個類針對異步RPC操作提供了一個用來設置額外的或者令牌級數據的地方。它也允許一個IResponder作爲一個獨立調用被附加。這個AsyncToken能夠在ResultEvent和FaultEvent中用token屬性來引用。"
如果你對Flex中遠程異步調用的本質不熟悉,肯定還是有點困惑的。我碰見過大量的對這個便捷類不熟悉的人,因此我試着來讓它明朗一點。
無論何時從你的flex/AIR應用中使用多個外部調用中的一個,你都不會知道這些調用是否或者何時返回結果(或者錯誤),你也不會知道它們返回的順序。即使你按照"RO1","RO2","RO3"的順序調用遠程對象,它們返回的順序還是可能不一樣。你可能也希望針對這些結果能有不同的處理。
一種方式就是給每一個調用分配一個異步令牌(AsyncToken )來追蹤這些調用。
不要這樣來進行遠程調用:
myRO.myRemoteMethod();
你應該這樣:
var token:AsyncToken=myRO.myRemoteMethod();(確保導入了mx.rpc.AsyncToken)

現在就有了一個變量"token",代表這個單獨的調用。像這樣,你可以分配token自己的result和fault處理函數
token.addResponder(myResponderClass);
這裏myResponderClass類實現了IResponder.實現Iresponder簡單的意味着定義瞭如下兩個方法簽名:
   * public function result(data:Object):void
收到返回值後由服務調用此方法。
* public function fault(info:Object):void
收到錯誤後由服務調用此方法。

因此你可以對你的遠程調用在調用時設置result和fault處理函數,而不用把硬編碼放到你的遠程對象,HTTPService或者WebService標籤裏。這也恰好就是Cairngorm和其他微體系結構的運行方式。
AsyncToken最後一點很酷的特性就是它是動態類。這意味着,當你進行遠程調用時可以添加屬性到token上,然後result/fault處理函數中讀取這些屬性。

另外,在flex sdk3.4中有CallResponder,可以用CallResponder實例的token屬性引用這個異步令牌。在flex sdk3.2中式沒有這個類的,如果要用的話就只能自己寫了,只要這個類繼承自Iresponder接口就可以了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章