我们目前有一些 Javascript 代码依赖于 Flex 通过 ExternalInterface 回调来完成一些繁重的工作。这不是世界上最漂亮的东西,但它确实有效。在 Flex 方面,我们定义了这样的东西(remoteCall 是一个具有典型 RemoteObject 行为的包装器):
ExternalInterface.addCallback("doOperation",
function(data:String, windowId:String):void { doOperation(data, windowId) });
private function doOperation(data:String, windowId:String):void {
remoteService.remoteCall(data, function(e:ResultEvent):void {
ExternalInterface.call("doOperationComplete", windowId, e.result);
});
}
在 Javascript 方面,我们有:
function doOperationComplete(windowId, result) {
var win = windowHandles[windowId];
win.handleResult(result);
}
这适用于我们的大多数用例,但我即将实现一些基本的任务监控,我希望有更好的方法。如果我从与上面相同的路径开始,我最终会遇到一个场景,即有一个 JS -> Flex 调用来获取任务状态。该调用返回 void,当该调用完成时,会有一个 Flex -> JS 调用为 JS 提供任务状态。然后 JS 需要查看状态并采取一些行动:放弃,对结果做一些事情,延迟后再次检查状态(另一个 JS -> Flex,Flex -> JS 循环)。
我还没有开始编写这个代码,但它似乎很快就会变得非常棘手,管理多个任务,将 Flex 调用与原始回调关联到 Javascript,传递适当范围的数据等。
有没有好的选择?为这种回调场景设计的某种 Javascript 任务插件?我忽略了一些设计模式?甚至一些有问题的技术,比如同步远程服务调用,以便doOperation
返回任务状态而不是 void?