我在多个远程对象调用时遇到问题。因此,首先我必须从服务器检索雇主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);
}