2

OK send() 呼び出しから結果を取得するたびに関数HTTPServiceを実行する があります。dataLoaded(e:ResultEvent):void

わかりましたので、前の呼び出しが結果を受け取る前に呼び出してから再度呼び出すHTTPService.send()と、繰り返し実行されることになりますが、これは望ましくありませんHTTPService.send()dataLoaded()

私が欲しいのはHTTPService.send()、前の呼び出しが結果を返す前に呼び出された場合です。最初の呼び出しをキャンセルし、最後の呼び出しの結果のみを処理したいHTTPService.send()

これが理にかなっていることを願っています。

どうやってやるの??

ありがとう!!

4

3 に答える 3

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)
}
于 2010-01-28T17:20:24.080 に答える
5

実際には HTTPService がこれを管理できます。おそらく「最後」に設定する必要がある同時実行プロパティがあります。

詳細はこちら: 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" とは対照的に、前の呼び出しを手動でキャンセルする必要があります。

これは、前の呼び出しが呼び出すサーバー プロセスを中断しないことに注意してください。つまり、サーバーはまだ応答を返す可能性がありますが、flex は既にそれを破棄します。

于 2011-08-23T04:33:53.797 に答える