2009-08-19 13 views
0

WebサービスコールはFlexでは非同期ですが、クラス内でWebサービスコールをラップして同期カプセル化を提供したいと考えました。以下のようなもの - ユーザーはgetMyMethodResultを呼び出し、Webサービスから返された結果を取得できます。私はsoap応答を受け取ったスレッドが変数_resultを設定し、getMyMethodは_resultがnullではないことを発見したことを意味します。しかし、それはしません!なぜこれがうまくいかないのか誰も説明できますか?フレックスでの同期Webサービスコールのプログラミング

public class myClass 
{ 
    private var _result:Object; 
    public function myClass() 
    { 
     //create a web service object 
     ... 

     // Add listener 
     _service.addMyMethodListener(myMethodListener); 
    } 

    public function getMyMethodResult() 
    { 
     _service.myMethod(); 

     while (_result == null) 
     { 
     // count a variable or something (unimportant) 
     } 

     return _result; 
    } 

    private function myMethodListener(event:Event):void 
    { 
     _result = event.result; 
    } 
} 

答えて

1

これは絶対にサポートされていません。イベントループはフレーム間で実行され、(無限ループで)実行をブロックする限り、myMethodListener関数は呼び出されません。とにかく、これはひどい考えです。なぜなら、Flash Playerにスレッドが存在しないと、サービスが戻るのを待つ間、UIがフリーズするからです。あなたはその考えを放棄すべきです。

+0

ご返信ありがとうございます。 私はまだ理解していません。私は彼らが別のスレッドで実行されていると思った?別のスレッドではない場合、Flash Playerはどのように非同期戻り値を処理しますか?イベントループがすべてを処理している場合、これらのタスクの実行順序を説明できますか?ありがとうございました –

+0

私は "アイデアを落として"、私はちょうどそれがうまくいかなかったのだろうかと思っていたので、私はフラッシュプレーヤー/フレックスの操作方法をよりよく理解することができた。私はフレックスに新しいです! –

+1

Flash Playerは、そのようなイベントを受け取ったときにコードの実行を中断しません。私が間違っていなければ、それは次のフレームまで待つつもりです。プレイヤーのバックグラウンド実装はスレッドを使用している可能性がありますが、アクションスクリプトが1つのスレッドでのみ実行されるようにイベントをキューに入れます。 – sharvey

関連する問題