只需单击flex中的按钮,即可进行多次异步调用以从多个服务获取结果?

时间:2010-12-27 19:38:52

标签: ajax flex actionscript-3 blazeds parsley

在我们的一个项目中,我们在前端使用flex,在后端使用blazeds / java。它是一个预先编写服务的现有代码。我必须在后端调用3个服务(基本上是3个远程对象)并获取结果并将结果存储在对象中,并在视图中显示该对象的数据。 现在我们正在使用Flex和Parsley Framework。我在考虑以下方法。

1)为每个服务调用创建命令并将结果存储在共享对象(模型)中,然后在视图中显示该模型。在这种方法中,问题是某些其他网页需要一些服务,但它们不需要相同的模型。   我该如何处理这种情况?我应该进行异步远程调用并获取结果,然后再使用存储结果的事件对象调度和事件。

2)拨打服务电话,等待结果然后再拨打电话然后再拨打电话,不确定这是否正确?

处理这种情况的最佳解决方案是什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

所以,我想我仍然对你的问题是什么感到困惑,所以如果我有三个不相关的调用来制作一个后端,我会通过告诉我采取的方法来回答它。

我会立刻将它们全部解雇。由于Flex中的后端调用始终是异步的,因此它们将立即返回。这些调用中的每一个都将包含一个回调函数,用于返回结果。因此,在伪(ish)代码中,它将是这样的:

makeRequest1(whenRequest1Finishes);
makeRequest2(whenRequest2Finishes);
makeRequest3(whenRequest3Finishes);

在这种情况下,makeRequest*是一种方法,它知道调用服务器/机制是什么,并将回调一个名为whenRequest*Finishes的地方定义的函数。

假设,现在您的UI有三个不同的部分与这些请求中的每一个分开更新,我会在它们进入时填充UI的那些区域。我不会简单地填充它们,尽管......我会告诉用户他们已经到达。这可以是数据“飞行”的微妙动画或等待指示器,当数据显示时消失。您可以制作一个等待指示符,而不是三个单独的等待指示符,这些指示符会填充整个用户界面,直到收到所有这三个用户界面时才会消失。

无论如何,除非呼叫相互依赖,否则我绝不会以串行方式拨打电话。使用Flex中内置的异步性可以并行地完成所有三个调用。

这是你要找的???

答案 1 :(得分:1)

你可以拥有一个包含三个调用结果的对象,并让每个响应处理程序将它们的响应放在对象中,并验证它们不是最后一次到达的调用。

示例:

类ManyResult
var firstResult:*
var secondResult:*
var thirdResult:*

function get complete():Boolean {return firstResult&& secondResult&& thirdResult; }

在每个处理程序中,您将拥有此通用逻辑:
  解析结果
  将解析后的结果放入ManyResult对象

如果ManyResult.complete:
method_which_glues_all_three_results_together()

如果此问题频繁发生,我不建议使用此解决方案,因为它很容易变得混乱。我建议你自己制作一些通用代码,以干净,标准的方式为你做这件事。