For-Loop中的Flex Multi Service呼叫问题

时间:2011-05-15 20:37:08

标签: flex service token

新版本:

感谢您的回复。对不起,我重新开始:

导入(。*用于测试):

mx.events.*
mx.soap.*
mx.rpc.*
mx.controlls.*

creationCompleteHandler()在programm start中使用creationComplete调用:

<?xml version="1.0" encoding="utf-8"?>
        <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
            creationComplete="creationCompleteHandler(event)">
             ..

在这个函数中,我从MySQL Table modul1请求数据。 module1Service1.getAllModule1_where是从Flex Design View自动生成的。这是一个与PHP / MySQL对话的服务。这个功能很好。参数中的id 2735是硬编码的,用于测试。 MySQL表modul1看起来像:

ID_MODUL1(PK) NAME
1             Modulx
2             Moduly
3             Modulz
      protected function creationCompleteHandler(event:FlexEvent):void {
            getAllModule1_whereResult2.token = module1Service1.getAllModule1_where(2735);
            getAllModule1_whereResult2.addEventListener(ResultEvent.RESULT,waitForResult1);
        }

结果准备好后,调用waitForResult1(event:ResultEvent)。现在我需要做一个新的MySQL调用。在这个函数中,我想从表modul1迭代MySQL结果行,并从MySQL表modul1_content中获取相应的数据,其中modul1_content.id_modul(FK)= modul1.id_modul1(PK)。循环中的变量id_module1使用正确的id设置。 table modul1_content看起来像:

ID_MODUL1_CONTENT(PK) ID_MODUL1(FK) CONTENT
1                     1             text...
2                     1             text...
3                     3             text...
4                     2             text...
//get module2 from module1_id
        public function waitForResult1(event:ResultEvent):void {

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

                id_module1 = getAllModule1_whereResult2.lastResult[i].id_modul1;

                c = new CallResponder(); 
                c.token = module2Service.getAllModule2_where( id_module1 );

                c.addEventListener(ResultEvent.RESULT,getListener2(i,getAllModule1_whereResult2.lastResult.length));        



            }   

        }

在每次迭代中,都会调用getListener2()。在最后一次迭代中,调用writeBook(module1,module2)。 writeBook工作正常,但参数module2缺乏。在每次迭代中,我想在公共变量module2 [i]中添加MySQL的结果。我被设定了。 0,1,2但模块2 [0]和模块2 [1]为空,模块2 [2]是正确的。存在i = 0和i = 1的MySQL行。

        public function getListener2(i:Number, max:Number):Function {
            return function(e:ResultEvent):void{
                module2[i] = c.lastResult;
                Alert.show( c.lastResult + " " + i);
                //all data loaded, call writeBook
                if(i == max -1){
                    writeBook( module1, module2 );
                }

            };
        }

0 个答案:

没有答案