開始用 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);