关于FLEX异步调用
我们都知道在FLEX中,我们写的代码都是异步执行的,所谓“异步”就是方法调用之后,当前线程并不阻塞以等待调用结果的返回,而是继续执行下一行代码(意思就是一行代码执行完后,并不会立即得到结果,再执行下一行代码。而是得不到结果,就继续执行下一行代码。最后FLASH PLAYER 中会有其它线程守候远程方法调用的结果,通过事件的形式,通知应用进行相应的处理),看了一些书籍和资料,也做了一些实例,异步调用经常会引起的2个问题:
问题1:异步调用导致模型数据不一致。
由于FLEX的异步执行,就无法保证这些远程调用的结果按顺序返回,因此会造成调用参数与返回的结果不匹配,这就造成了数据模型的不一致。
问题2:异步调用导致用户反复误操作。
由于FLEX在异步执行的时候,不会阻塞当前的线程,而此时用户还可以继续操作当前的人机界面 。如果远程调用比较耗费性能,需要等上几妙钟才能返回,这时如果人机界面上没有执行相应的处理 ,那么就会有用户认为自己所做的操作没起作用,就有可能一直执行这个操作,这样多次连续重复请求服务器,就会浪费服务器资源,并且会引起用户的误操作。
那么我们到底如何才能避免这种问题的出现呢?也就是我们怎么样才能在异步执行的时候,当执行完一句代码后,立即得到结果的返回,再去执行下一句代码呢?
我们可以使用回调函数。
1 首先我们可以自定义一个事件,在事件里面加入回调函数。
private function callbackHandler(event:MyComboBoxEvent):void{event.callback(selectNewIndex);}