Flex上的多任务问题

Mar*_*leu 0 php apache-flex multithreading actionscript

我有一个方法可以同时从PHP调用两个服务.由于Flex的多任务处理能力,我认为每个服务都在不同的线程中调用.

我的问题是:两个服务都从数据库返回一个对象数组.但第二个服务将提供一个DataGrid,它具有每个记录的处理程序.这个处理程序将比较两个Arrays中的那个,当Flex在完成第一个之前完成第二个时,我遇到了问题,因为处理程序试图将数据与空对象进行比较(PHP服务尚未响应).

有任何想法吗?

编辑:

在我发布这个问题的那天,有些人给了我一个惊人的想法,但遗憾的是他似乎删除了他的帖子,我不知道为什么.我坚持他的想法,我找到了一个符合我的设计模式的解决方案.

他告诉我把一个标志告诉我数据是否已经加载.所以这就是我现在正在做的事情:我称之为先服务; 我叫第二次服务;

在第一个服务的结果,我检查第二个服务上的标志,如果它是真的,这意味着它已经加载,所以我可以将我的数据存储在DataGrid中,以便可以调用处理程序.如果该标志为false,则表示尚未加载第二个数据,因此我将其存储在一个没有绑定到dataGrid的_temp DataProvider上,而不是存储在官方dataProvider中的数据.在这种情况下,当加载第二个数据时,会将侦听器事件分派给第一个服务,告诉他捕获_temp dataProvider并将其复制到官方dataProvider.

特别是,我喜欢这个解决方案,并没有打破Table Data Gateway的设计模式.

谢谢大家的帮助.

wel*_*rat 5

由于Flex的多任务处理能力,我认为每个服务都在不同的线程中调用.

是什么让你认为Flex支持多线程? 它真的没有.仅限单线程.

但是,您的调用是异步的,因为当它们被发送时,程序不会停止等待答案,而是监听完成事件.

您的解决方案很简单:只发送第一个请求,等待它完成,然后在完成处理程序中发送第二个请求.

编辑

要保留您的设计模式,您可以应用两种不同的策略:

  1. 使用业务代表模式:将自定义类充当网关,并封装与服务的实际连接.然后它可以调度自己的COMPLETE事件来触发您拥有的处理程序.对于DataGrid,它看起来像一个异步调用.

  2. 使用会话外观模式:在服务器端创建单个服务,该服务接受单个请求,在本地调用引用的服务,并在单个响应中返回两个服务的组合数据.