对RemoteObject、AsyncToken的理解

本文介绍了Flex中的远程对象调用机制,包括如何初始化RemoteObject、使用代理模式进行远程方法调用,以及通过AsyncToken追踪异步调用结果的方法。同时探讨了如何为每个远程调用分配异步令牌来追踪调用,并提供了实现自定义响应处理器的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、private var service:RemoteObject = new RemoteObject("remote");

 与

   private var service:RemoteObject = new RemoteObject();

   service.destination = "Cvbs-remote";

  一致

 

2、var call:AsyncToken = service.executeFlex(data);

  由于RemoteObject   继承的AbstractService 继承了Proxy 因此可以使用代理模式

   查看AbstractService 的源代码

   上面的代码与:

    var remoteMethods:AbstractOperation = service.getOperation("executeFlex");

    remoteMethods.send(data);

  一致

 

AbstractService 中代码:

 

Js代码  收藏代码
  1. public dynamic class AbstractService extends Proxy implements IEventDispatcher  
  2. {     
  3.     /** 
  4.      * @private 
  5.      */  
  6.     override flash_proxy function callProperty(name:*, ... args:Array):*  
  7.     {  
  8.         return getOperation(getLocalName(name)).send.apply(null, args);  
  9.     }  
  10.   
  11.   
  12.     public function getOperation(name:String):AbstractOperation  
  13.     {  
  14.         var o:Object = _operations[name];  
  15.         var op:AbstractOperation = (o is AbstractOperation) ? AbstractOperation(o) : null;  
  16.         return op;  
  17.     }  
  18.     。。。  
  19. }  

 

3、无论何时从你的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接口就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值