多个异步调用来填充对象

时间:2010-08-28 21:54:58

标签: flex

我正在开发一个Flex应用程序,但在使用异步调用时遇到了一些麻烦。这是我希望能够做到的:

[Bindable] var fooTypes : ArrayCollection();

for each (var fooType : FooType in getFooTypes()) {
    fooType.fooCount = getFooCountForType(fooType);
    itemTypes.addItem(fooType);
}

我遇到的问题是getFooTypes和getFooCountForType都是对Web服务的异步调用。我了解如何通过设置响应程序和使用ResultEvent来填充fooTypes,但是如何使用结果调用另一个服务?是否有任何建议/模式/框架来处理这个?

1 个答案:

答案 0 :(得分:2)

如果可能,我强烈建议您重新使用远程服务,以便一次性返回所需的所有数据。

但是,如果您认为无论出于何种原因不可能或不实用,我建议您进行某种类型的远程呼叫链接。

添加您要在数组中创建的所有“远程调用”。打电话给第一个。在结果处理程序中处理结果,然后弹出下一个并调用它。

当您调用远程调用时,我的代码示例中有点不清楚,但我认为它是getFooCountForType方法的一部分。从概念上讲,我会做这样的事情。定义要进行的调用数组:

public var callsToMake : Array = new Array();

缓存当前正在进行的fooType:

public var fooType : FooType;

进行循环并存储结果:

for each (var fooType : FooType in getFooTypes()) {
    callsToMake.push(fooType);
    // based on your code sample I'm unclear if adding the fooTypes to itemTypes is best done here or in the result handler
    itemTypes.addItem(fooType);
}

然后调用远程处理程序并保存您正在处理的foo:

fooType = callsToMake.pop();   
getFooCountForType(fooTypeToProcess);

在结果处理程序中执行以下操作:

// process results, possibly by setting 
fooType.fooCount = results.someResult;

再次调用远程方法:

fooType = callsToMake.pop();   
getFooCountForType(fooTypeToProcess);