好的我有HTTPService
只要从send()调用得到结果就会执行dataLoaded(e:ResultEvent):void
函数。
好的,如果我打电话给HTTPService.send()
,然后在前一个收到结果之前再次致电HTTPService.send()
,我最终会反复运行dataLoaded()
,这是不受欢迎的
我想要的是在前一次调用之前调用HTTPService.send()
会返回结果。我想取消第一个电话,只处理上次拨打HTTPService.send()
我希望这是有道理的。
我该怎么做?
谢谢!
答案 0 :(得分:6)
HTTPService有一个cancel方法。如果在没有参数的情况下调用它,它应该取消最后一次调用服务。尝试一下,看看你是否还有不受欢迎的ResultEvents。
使用ASyncToken的存在来确定取消是否合适。
private var _serviceCall:ASyncToken;
function callMyService(stuff:Object):void {
if (_serviceCall !== null) {
myService.cancel();
_serviceCall = null;
}
_serviceCall = myService.send(stuff)
}
答案 1 :(得分:5)
实际上,HTTPService可以为您管理。它有一个并发属性,您应该将其设置为“last”。
此处有更多信息:HTTPService#concurrency
答案 2 :(得分:1)
除了罗伯特的回答:Flex: Cancel HTTPService.send()?
HTTPService#concurrency似乎是在Flex 4之前引入的,我在Flex 3中找不到它。。在Flex 3。中,您必须手动取消上一个调用,而不是Flex 4中的concurrency =“last”。
请注意,这不会中断先前调用调用的服务器进程,这意味着服务器可能仍然会响应已经放弃的响应。