0

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

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

2)打一个服务调用,等待结果然后打另一个电话,等待结果然后打另一个电话,不确定这是否是正确的方法?

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

4

2 回答 2

1

所以,我想我仍然对你的问题感到困惑,所以我将尝试通过告诉我如果我对后端进行三个不相关的调用我会采取的方法来回答它。

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

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

在这种情况下makeRequest*,一种方法知道服务器/机制是什么来进行调用,并将回调到您在某个地方定义的函数whenRequest*Finishes

假设,现在您的 UI 有三个不同的部分与这些请求中的每一个分别更新,我会在它们进入时填充 UI 的这些区域。不过,我不会简单地填充它们......我会给用户表示他们已经到达。这可以是数据“飞入”的微妙动画,也可以是数据出现时消失的等待指示器。您可以创建一个填充整个 UI 的等待指示符,而不是三个单独的等待指示符,直到收到所有三个等待指示符才会消失。

无论如何,除非这些电话相互依赖,否则我永远不会以串行方式拨打电话。充分利用 Flex 中内置的异步性,并行进行所有三个调用。

这是你想要的???

于 2010-12-28T01:23:47.183 回答
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()

如果这个问题很频繁,我不建议使用这个解决方案,因为它很容易变得混乱。我建议您自己编写一些通用代码,以干净、标准的方式为您执行此操作。

于 2010-12-28T20:40:35.460 回答