【问题标题】:using AsyncToken and AsyncResponder使用 AsyncToken 和 AsyncResponder
【发布时间】:2012-10-16 06:20:46
【问题描述】:

我想获得层次结构的两级结果。 AsyncToken 的第一个结果是好的,然后我设置了一个 for 循环并在每个循环步骤中以相同的方式调用下一级结果。这是问题所在,token2.addResponder(responder2); 永远不会在每个循环步骤中按时返回结果。毕竟它会向我发送循环结果。但我需要在每一步。 你能告诉我我的错误吗?

public function getChildResultHandler(event:ResultEvent, token:Object=null ):void
{
        myObject=event.result;  //first asynToken result is Ok
        var myArrayCol:ArrayCollection=new ArrayCollection();               
        myArrayCol=ArrayCollection(myObject);
        var mlObject:MLObject=new MLObject();  

        var i:int;
        for(i=0;i<myArrayCol.length;i++)
        {
            mlObject=myArrayCol[i]; 

            if (mlObject.Type=="Bin")
            {
                token2=new AsyncToken(null);
                token2=myService.GetChildObjects(sessionID,mlObject.ObjectID);
                responder2=new  AsyncResponder(getNextLevelChild,getChildFaultHandler);
                token2.addResponder(responder2);
            // I cant get results here 
            // this query goes to getNextLevelChild func after for loop results
            }
        }
    } 

我是否必须等待两个结果,如果是,我该如何等待响应者或令牌?

【问题讨论】:

    标签: actionscript-3 apache-flex flex4.6 asynctoken


    【解决方案1】:

    因为,这些是异步调用。不可能知道返回结果的顺序。可能是第一个呼叫将首先结束,可能是第二个。

    因此,我们必须等待所有异步调用的完成时间才能获得正确的结果。

    【讨论】:

      【解决方案2】:

      这个tutorial 可能会有所帮助,因为它解决了与您遇到的问题非常相似的问题。有 3 个远程过程调用通过字母 ABC 进行。调用按 BAC 顺序返回。本教程演示了如何使用 ASyncToken 和 Responders 来确定哪个结果处理程序正在为哪个调用触发。

      【讨论】:

      • 欢迎来到 Stack Overflow!请注意,这里不鼓励直接链接到您自己的网站/产品,原因有两个;首先,答案应该作为独立的答案发布,而不仅仅是指向外部站点的链接。其次,自我推销在这里往往不受欢迎,并且经常被标记为垃圾邮件(特别是如果没有披露您链接到自己的网站/产品)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2019-10-22
      相关资源
      最近更新 更多