JavaScript 解決異步順序執行問題

開始用 for 循環異步調用數據的時候,發現異步的執行時在 for 循環後面執行。固然獲取的結果也不是我想要的。html

通常這種狀況:咱們能夠經過下面方法解決ajax

一、JQuery $ajaxapp

設置ajax參數async爲false,即與js同步,默認是true(異步).curl

for(int i = 0 ; i < 5 ; i++){異步

var html= $.ajax({url: url,async: false}).responseText;async

}函數

二、能夠利用遞歸的方法實現,當異步執行完成後在調用自身的函數url

 $scope.goodsList = [];htm

            function getProducts(nameIndex){排序

//                for(var i=0;i<name.length;i++){        //原來 for 循環寫法獲取的數據排序不固定

                    var product = new AV.Query('Product');

                    //商品類型

                    var Cid = new AV.Query('Classify');

                    Cid.equalTo("gjz", name[nameIndex]);

                    Cid.find().then(function(res){

                        product.equalTo("cid",  parseInt(res[0].id));

                        product.equalTo("status", 1);

                        product.descending("updatedAt");

                        product.limit(4);

                        var results = [];

                        //查詢商品

                        product.find().then(function(res2) {

                            angular.forEach(res2, function (result, index) {

                                var oo = result.toJSON();

                                oo.picurlarray = angular.fromJson(oo.picurlarray);

                                oo.activeName = res[0].toJSON().title;

                                oo.activeNameEN = res[0].toJSON().gjz;

                                for(var key in oo.spec){

                                    $scope.$apply(function() {

                                        oo.product = oo.spec[key];

                                        results.push(oo);

                                    });

                                    break;

                                }

                            });

                            $scope.goodsList.push(results);

                            console.log($scope.goodsList);

                            /*

                            *利用遞歸實現異步數據執行後再調用自身函數

                            */

                            nameIndex++;

                            if(nameIndex<name.length)

                                getProducts(nameIndex);

                            else

                                return;

                        });

                    });

//                }

            }

            //果真推薦、果真熱賣、積分商品、果真好禮、果真特價

            var name = ["grtj","grrm","jfsp","grhl","grtjia"];

            var nameIndex = 0;

            getProducts(nameIndex);

相關文章
相關標籤/搜索