2010-01-28 3 views
2

OK У меня есть HTTPService, который выполняет функцию dataLoaded(e:ResultEvent):void всякий раз, когда он получает результат вызова send().Flex: Отменить HTTPService.send()?

ИТАК Если я позвоню HTTPService.send(), а затем вызвать HTTPService.send() снова прежде, чем предыдущий один получает результат, я в конечном итоге повторно запущен dataLoaded(), который является нежелательным

То, что я хочу, если HTTPService.send() вызывается до предыдущего вызова к нему возвращает результат. Я хочу отменить первый вызов и обработать результат только с последнего звонка до HTTPService.send()

Надеюсь, это имеет смысл.

Как это сделать?

Спасибо!

ответ

5

На самом деле HTTPService может управлять этим для вас. У этого есть свойство concurrency, которое вы, вероятно, должны установить на «last».

Больше информации здесь: HTTPService#concurrency

+0

Привет, Как остановить выполнение HTTP службы, когда при это посередине ?. Мой сценарий; Я делаю поисковую службу, которая выполняет поиск пациента из БД из входного текстового ввода. Если пользователь меняет текст, который он вводит, прежде чем я снова отправлю служебный вызов, но я хочу получить результат на основе последнего введенного текста, первый звонок, который я посылаю(), я хочу уничтожить или остановить его. Как я достигаю этого? Спасибо заранее. –

+0

См. Http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/http/HTTPService.html#cancel() –

6

HTTPService имеет способ отмены. Если вы вызываете его без его параметра, он должен отменить последний вызов службы. Попробуйте и убедитесь, что вы все еще получаете нежелательные ResultEvents.

Используйте существование ASyncToken, чтобы определить, подходит ли отмена.

private var _serviceCall:ASyncToken; 

function callMyService(stuff:Object):void { 
    if (_serviceCall !== null) { 
     myService.cancel(); 
     _serviceCall = null; 
    } 
    _serviceCall = myService.send(stuff) 
} 
+0

+1, потому что я не мог принять оба ответа :) –

+0

+1 от меня тоже, потому что это хороший ответ :) –

+0

+1 Хороший ответ: P –

1

В дополнение к ответу Роберта: Flex: Cancel HTTPService.send()?

HTTPService # параллелизм, кажется, не будет введен до Flex 4, я не нахожу это в Flex 3. . В Flex 3. вам необходимо отменить предыдущий вызов вручную в отличие от concurrency = «последний» в Flex 4.

Обратите внимание, что это не будет прерывать процесс сервера, который вызывает предыдущий вызов, это означает, что сервер все еще может появиться ответ, однако, отбросить это уже.

+0

Моя ошибка, я нашел это свойство в последнем Flex 3.6, кажется мой документ 3.x довольно старый. –