我正在开发一个Flex应用程序,但在使用异步调用时遇到了一些麻烦。这是我希望能够做到的:
[Bindable] var fooTypes : ArrayCollection();
for each (var fooType : FooType in getFooTypes()) {
fooType.fooCount = getFooCountForType(fooType);
itemTypes.addItem(fooType);
}
我遇到的问题是getFooTypes和getFooCountForType都是对Web服务的异步调用。我了解如何通过设置响应程序和使用ResultEvent来填充fooTypes,但是如何使用结果调用另一个服务?是否有任何建议/模式/框架来处理这个?
答案 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);