标签:
开始用 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);
标签:
原文地址:http://my.oschina.net/jack088/blog/486236