2

好的,我有一个在从 send() 调用中获得结果时HTTPService执行该函数的函数。dataLoaded(e:ResultEvent):void

好的,所以如果我在前一个收到结果之前调用HTTPService.send()然后HTTPService.send()再次调用,我最终会重复运行dataLoaded(),这是不可取的

我想要的是如果HTTPService.send()在之前调用它返回结果之前被调用。我想取消第一次通话,只处理最后一次通话的结果HTTPService.send()

我希望这是有道理的。

我怎样才能做到这一点??

谢谢!!

4

3 回答 3

6

HTTPService 有一个取消方法。如果你在没有参数的情况下调用它,它应该取消服务的最后一次调用。试一试,看看您是否仍然收到不希望的 ResultEvents。

使用 ASyncToken 的存在来确定取消是否合适。

private var _serviceCall:ASyncToken;

function callMyService(stuff:Object):void {
    if (_serviceCall !== null) {
        myService.cancel();
        _serviceCall = null;
    }
    _serviceCall = myService.send(stuff)
}
于 2010-01-28T17:20:24.080 回答
5

实际上 HTTPService 可以为你管理这个。它有一个并发属性,您可能应该将其设置为“last”。

更多信息:HTTPService#concurrency

于 2010-01-28T18:40:47.727 回答
1

除了罗伯特的回答:Flex: Cancel HTTPService.send()?

HTTPService#concurrency 似乎直到 Flex 4 才引入,我在 Flex 3 中没有找到这个。。在 Flex 3中,与 Flex 4 中的 concurrency="last" 相比,您必须手动取消之前的调用。

请注意,这不会中断先前调用调用的服务器进程,这意味着服务器可能仍然会做出响应,但是已经放弃了响应。

于 2011-08-23T04:33:53.797 回答