异步方法的问题

时间:2011-01-19 01:00:46

标签: java flex asynchronous

我正在使用Flex 4从JVM 1.6调用webservices

我正在尝试对java进行异步调用以填充三个组合框,这三个组合框将显示国家,州和城市,这三个是相关的(主从关系),但有时调用不符合,或者它们没有完成,而且我认为这是因为它们是异步的,当主组合框(国家)被填满时,我怎么能确定我正在调用填充下一个组合框呢?

protected function comboCountry_changeHandler(idCombo:String):void             {

            selectedComboCountry= idCombo;
            var countryId:String; 
            if(selectedComboCountry == comboCountry.id){
                countryId = String(comboCountry.selectedItem.countryId);                
            }else if(selectedCombocountry == combocountrySuc.id){
                countryId = String(comboCountrySuc.selectedItem.countryId);
            }



            obtainStatesResult.token = wsfacturas.obtainStates(countryId);


        }

protected function obtainStatesResult_resultHandler(event:ResultEvent):void             {                 var StateListVo:ArrayCollection = obtainStatesResult.token.result as ArrayCollection;

            if(selectedComboCountry == "comboCountrySuc"){

                StateListsSuc.removeAll();
                CityListsSuc.removeAll();
                for (var d:int = 0; d < StateListVo.length; d++){
                    var estSuc:State = StateListVo[d];
                    StateListsSuc.addItem(estSuc);                                          
                }       

                comboStateSuc.dataProvider = StateListsSuc;
            }
            else if(selectedCombocountry == "combocountry"){
                StateListsEmp.removeAll();
                CityListsEmp.removeAll();
                for (var i:int = 0; i < StateListVo.length; i++){
                    var estEmp:State = StateListVo[i];
                    StateListsEmp.addItem(estEmp);      
                }                   
                comboState.dataProvider = StateListsEmp;
            } else {

                for (var f:int = 0; f < StateListVo.length; f++){
                    var est:State = StateListVo[f];
                    StateListsSuc.addItem(est); 
                    StateListsEmp.addItem(est); 
                }                           
                comboState.dataProvider = StateListsEmp;
                comboStateSuc.dataProvider = StateListsSuc;

            }
        } 

2 个答案:

答案 0 :(得分:1)

这不是说你可能需要加载国家并等待国家组合框上的更改事件来更新状态等等吗?如果你这样做,你不必担心你的请求的异步性?否则,您可能可以使用DataProviders,他们可能会提供事件:完成.. 我不确定,我绝对不是专家.. :)

答案 1 :(得分:0)

您可能希望在问题中提供更多细节。但我只是在玩你提供的任何细节。

1_第一次异步调用从未对动态数据绑定造成任何问题。有时 SOAP调用可能需要合理的时间,在这种情况下,请确保显示忙碌的光标,直到Web服务调用返回。

2_Combobox一直存在动态数据绑定问题。您可以创建扩展组合框并覆盖setValue方法的自定义组合框。或者,您必须遍历组合框的dataProvider并在数据字段中查找匹配项,然后将组合框设置为该项。

总而言之,问题主要与将新数据绑定到渲染的组合框而不是异步调用或任何延迟有关。