Flex多个远程对象调用

时间:2012-04-12 10:46:57

标签: flex flex4 flex4.5 blazeds flex-mobile

我遇到多个远程对象调用的问题。因此,首先我必须从服务器检索employerID(使用BlazeDS顺便说一句),其次我必须根据雇主ID的要求为每个雇主ID提出请求,并为每个雇主检索其他详细信息(另外2个远程对象调用每个雇主ID)。因此,当您了解第3个远程对象调用时,将第2个响应作为参数,第2个响应将第1个响应作为参数。

我的问题是,当我遍历第一个请求的响应时,它只调用第二个远程对象的最后一个元素而不是每个元素。

这是我的观看代码:

<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>

如何让flex线程等到前一个返回响应?任何线程处理方法?

1 个答案:

答案 0 :(得分: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);
}