1

複数のリモートオブジェクト呼び出しに問題があります。そのため、最初にサーバーからemployerIDを取得する必要があります(BlazeDS btwを使用)。次に、各employerIDを要求し、employerIDに応じて各employerのその他の詳細を取得する必要があります(各employerIDに対して別の2つのリモートオブジェクト呼び出し)。したがって、ご理解のとおり、3番目のリモートオブジェクト呼び出しは2番目の応答をパラメーターとして受け取り、2番目のリモートオブジェクト呼び出しは1番目の応答をパラメーターとして受け取ります。

私の問題は、最初のリクエストの応答を繰り返すときに、それぞれではなく最後の要素に対してのみ2番目のリモートオブジェクトを呼び出すことです。

これが私のビューコードです:

<fx:Declarations>
    <parsley:FastInject property="karBUS" type="{KarBUS}"/>
        <s:CallResponder id="hastalariGetirResponder" result="hastalariGetirResponder_resultHandler(event)"/>
        <s:CallResponder id="yatakOdaGetirResponder" result="yatakOdaGetirResponder_resultHandler(event)" fault="yatakOdaGetirResponder_faultHandler(event)"/>
        <s:CallResponder id="hastaKartlariGetirResponder" result="hastaKartlariGetirResponder_resultHandler(event)"/>
        <s:CallResponder id="hastaResimGetirResponder" result="hastaResimGetirResponder_resultHandler(event)"/>
        <parsley:Configure  />
    </fx:Declarations>

<fx:Script>
        <![CDATA[

[Inject(id="karBUS")]
public var karBUS:KarBUS;

            protected function view1_creationCompleteHandler(event:FlexEvent):void
            {


                trace("Hastalarim View: persID:"+SessionClientData.prsnl.personelId+",servisID: " + SessionClientData.servisId);
                hastalariGetirResponder.token = karBUS.getHastalarim(SessionClientData.prsnl.personelId,SessionClientData.servisId);

            }

protected function hastalariGetirResponder_resultHandler(event:ResultEvent):void
            {
                hastalarim = hastalariGetirResponder.lastResult;

                if(hastalarim.length == 0) {
                    this.addElement(txt_empty);
                    this.removeElement(busy_ind);
                }

                for(var i:int=0;i<hastalarim.length;i++){

                    kt = hastalarim.getItemAt(i) as Object;

                    vizitID = kt[6];
                    hastaTC = kt[3];

                    yatakOdaGetirResponder.token = karBUS.getYatakOdaNo(vizitID);
                }

            }


protected function yatakOdaGetirResponder_resultHandler(event:ResultEvent):void
            {
                yatakOda = yatakOdaGetirResponder.lastResult as Object;

                hastaKartlariGetirResponder.token = karBUS.getHastaKarti(vizitID);

            }

            protected function hastaKartlariGetirResponder_resultHandler(event:ResultEvent):void
            {
                hastaTuru = hastaKartlariGetirResponder.lastResult as String;

                hastaResimGetirResponder.token = karBUS.getHastaResim(hastaTC);
            }

            protected function hastaResimGetirResponder_resultHandler(event:ResultEvent):void
            {
                resim = hastaResimGetirResponder.lastResult as ByteArray;


                dp=new ArrayCollection();

                var yatak:String;
                var oda:String;
                var kat:String;

                if(yatakOda == null){
                    yatak = "";
                    oda = "";
                    kat = "";
                }else{
                    yatak = yatakOda[2];
                    oda = yatakOda[1];
                    kat = yatakOda[0];
                }

                for(var i:int=0;i<hastalarim.length;i++){

                    kt = hastalarim.getItemAt(i) as Object;

                    var dt:Date = kt[5] as Date;
                    var vizitT:String = dt.date + "-" + (dt.month+1) + "-" + dt.fullYear;

                    dp.addItem({hastaId:kt[0], adi:kt[1],soyadi:kt[2],tcKimlikNo:kt[3], resim: resim,
                        yasi:kt[4],katNo:kat,odaNo:oda,yatakNo:yatak,
                        vizitTarihi:vizitT,vizitId:kt[6],cinsiyeti:kt[7], hastaTuru:hastaTuru});


                    trace("OdaNO - Yatak NO: "+ oda + ", " + yatak);

                }






            }



    ]]>
    </fx:Script>

前のスレッドが応答を返すまでフレックススレッドを待機させるにはどうすればよいですか?スレッド処理方法はありますか?

4

1 に答える 1

3

問題は、毎回トークンを上書きしていることだと思います

for(var i:int=0;i<hastalarim.length;i++){
   ...    
   yatakOdaGetirResponder.token = karBUS2.getYatakOdaNo(vizitID);
}

したがって、最後の要求に対する応答のみが処理されます。

静的レスポンダーを使用するのではなく、リクエストごとにyatakOdaGetirResponder新しいオブジェクトを作成する必要があります。CallResponder

for(var i:int=0;i<hastalarim.length;i++){
    ...    
    var responder: CallResponder = new CallResponder();
    responder.addEventListener(ResultEvent.RESULT,  yatakOdaGetirResponder_resultHandler);
    responder.token = karBUS2.getYatakOdaNo(vizitID);
}
于 2012-04-12T11:41:36.763 に答える