码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 解决异步顺序执行问题

时间:2015-07-31 18:46:39      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

开始用 for 循环异步调用数据的时候,发现异步的执行时在 for 循环后面执行。当然获取的结果也不是我想要的。

一般这种情况:我们可以通过下面方法解决

1、JQuery $ajax

设置ajax参数async为false,即与js同步,默认是true(异步).

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

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

}

2、可以利用递归的方法实现,当异步执行完成后在调用自身的函数

 $scope.goodsList = [];

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


JavaScript 解决异步顺序执行问题

标签:

原文地址:http://my.oschina.net/jack088/blog/486236

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!