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);

相关文章
相关标签/搜索