灵活执行多个远程对象调用



我在多个远程对象调用时遇到问题。因此,首先我必须从服务器检索雇主ID(使用BlazeDS btw),其次,我必须为每个雇主ID发出请求,并根据雇主ID检索每个雇主的其他详细信息(每个雇主ID还有另外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>

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

我认为问题是你每次都在覆盖令牌

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);
}

相关内容

  • 没有找到相关文章

最新更新