2010-01-08 95 views
0

虽然试图解决序列化cairngorm命令的执行过程中遇到的问题,但我试图完全绕过事件分派,并简单地实例化了我想执行的命令,然后将其命名为execute方法。在这种方法中,调用一个调用ServiceUtils来执行HTTPService.send事物的代理...FLEX Cairngorm命令...奇怪的行为

现在,这些命令应该按照我称之为的顺序运行。 而且,由于服务器(RAILS)只有一个,所有的请求应该以相同的顺序返回。 这不是这样......顺序因不同的执行而有所不同..为什么?!?

回答

1

仅仅因为您以特定顺序发送请求并不意味着响应将按照该顺序返回。 HTTPService调用是异步的。例如,假定以下三个请求在同一时间发送的:

请求1(在服务器上4秒钟处理)
请求2(花费0.5秒来处理)
请求3(需要2秒处理)

假设网络速度是恒定的(和很多其他环境问题是常数),你会得到请求2回响应,再申请3,然后要求1

如果您需要打电话给他们,你应该这样做:

protected function doWork():void { 
    request1.send(); 
} 

protected function onRequest1Complete(e:ResultEvent):void { 
    request2.send(); 
} 

protected function onRequest2Complete(e:ResultEvent):void { 
    request3.send(); 
} 

protected function onRequest3Complete(e:ResultEvent):void { 
    // you are done at this point 
} 

... 

<mx:HTTPService id="request1" url="http://example.com/service1" result="onRequest1Complete(event)" /> 
<mx:HTTPService id="request2" url="http://example.com/service2" result="onRequest2Complete(event)" /> 
<mx:HTTPService id="request3" url="http://example.com/service3" result="onRequest3Complete(event)" /> 

希望有所帮助。

+0

我不太相信.. Web服务器只有一个,它可以一次处理只有一个请求。因此我还是不明白为什么它在不同的返回顺序..但我解决了问题,使GUI的返回订单证明' 谢谢 – luca 2010-01-11 12:01:25

+0

出于同样的原因,您可以在您的计算机上运行多个应用程序,服务器可以处理多个请求。例如,在您的计算机上,您可能打开了Web浏览器,可以听音乐,并可以打开IDE。想象每一个这些请求。你的电脑不停止播放音乐,因为你在你的IDE中,对吧?这与服务器上的概念相同。想象一下,如果服务器一次只能按请求处理,那么将需要物理基础设施!如果有人在您的网站上进行了过程密集型处理,则会阻止其他人使用它。 HTH。 – 2010-01-11 13:37:21

0

RJ的回答非常好。只需添加它:

您的命令将通过您使用的服务创建异步请求。如果您想“模拟”命令的同步执行,则后续命令必须在先前命令请求的resultHandler中执行。

虽然这可能不总是最干净的做事方式,但它可能适合您的情况。我需要更多关于服务调用的性质和一般的应用程序的信息来进行调用,无论这是否适合您的最佳方法。

HTH, 斯里兰卡