我遇到多个远程对象调用的问题。因此,首先我必须从服务器检索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线程等到前一个返回响应?任何线程处理方法?
答案 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);
}