在我们的一个项目中,我们在前端使用flex,在后端使用blazeds / java。它是一个预先编写服务的现有代码。我必须在后端调用3个服务(基本上是3个远程对象)并获取结果并将结果存储在对象中,并在视图中显示该对象的数据。 现在我们正在使用Flex和Parsley Framework。我在考虑以下方法。
1)为每个服务调用创建命令并将结果存储在共享对象(模型)中,然后在视图中显示该模型。在这种方法中,问题是某些其他网页需要一些服务,但它们不需要相同的模型。 我该如何处理这种情况?我应该进行异步远程调用并获取结果,然后再使用存储结果的事件对象调度和事件。
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()
如果此问题频繁发生,我不建议使用此解决方案,因为它很容易变得混乱。我建议你自己制作一些通用代码,以干净,标准的方式为你做这件事。