等待所有服务调用返回Flex PureMVC中的值的最佳方法

时间:2013-07-24 10:34:34

标签: flex asynchronous air puremvc

我正在使用PureMVC编写Adobe AIR应用程序。

想象一下,我有一个基于页面的应用程序视图(使用ViewStack),用户以某种方式浏览这些页面(比如点击按钮或其他)。

现在举例来说,我有一个帐户信息页面,当实例化或再次显示需要从WebService加载数据时(例如电子邮件帐户余额< / strong>和用户名),并且在返回数据时,我想在我的“帐户信息”页面上以正确的标签显示它。

问题是当我执行这三个Web调用时,每个Web调用将在不同的时间返回不同的resultEvent。我想知道什么是获取服务调用的 ALL 返回结果的信息的最佳方法,所以我知道我可以一次显示所有结果(也许在此之前发生一些加载屏幕)。

2 个答案:

答案 0 :(得分:0)

我真的不太了解PureMVC,但是as3commons-async库非常适合管理异步调用,并且在任何框架设置中都可以正常工作

http://as3commons.org/as3-commons-async/

在您的情况下,您可以创建3个实现IOperationIAsyncCommand的类(取决于您是否计划立即执行操作或延迟执行操作)封装RPC。 完成此操作后,您只需创建一个新的CompositeCommand并将操作添加到其队列中。 完成所有操作后,CompositeCommand将触发OperationEvent.COMPLETE

顺便说一句,当您下载as3commons-asyc-flex软件包时,该库甚至还包括一些预先实现的常见Flex操作,例如HTTPRequest。

答案 1 :(得分:0)

我会这样做:

  1. 为三个信息实体(EMailProxy,BalanceProxy,UsernameProxy)中的每一个创建代理;
  2. 创建一个委托类,用于处理与WebService的交互(类似“公共类WSConnector实现IResponder {...}”),代理用它来调用结束ws-methods;
  3. 创建一个代理,协调所有三个结果(CoordProxy);
  4. 选择一个协调所有三个调用的调解器(例如,它可以由您的ApplicationMediator完成);
  5. 为所有代理结果创建通知常量(GET_EMAIL_RESULT,GET_BALANCE_RESULT,GET_USERNAME_RESULT,COORD_RESULT);
  6. 让ApplicationMediator获取所有4个通知;

    • 重要的是,您不仅要等待所有三个结果,还要为一些错误及其解释做好准备。这就是为什么一个简单的计数器可能太弱了。
  7. 整个工作流程可能如下所示:

    1. 用户启动该过程;
    2. 某个介体从GUI组件中获取事件并发送DO_TRIPLECALL之类的通知;
    3. ApplicationMediator捕获此通知,删除CoordProxy的状态并从您的代理中调用所有3个方法(getEMail,getBalance,getUsername)。
    4. 响应是异步的。每个代理从委托获取响应,更改自己的数据对象并发送适当的通知。
    5. ApplicationMediator捕获这些通知并更改CoordProxy的状态。当所有三个响应都存在时(可能并非所有响应都成功),CoordProxy会发送一个包含整体结果的通知。
    6. 我知道这不是通过调解员进行这种互动的最佳方法。最初的想法是使用命令进行所有“业务逻辑”决策。但是,创建官僚机构可能太无聊了。

      我希望它可以帮到你。我很高兴知道你的解决方案,并在此讨论。