我正在开发一个系统,目前要求我从API加载所有项目。
API内置了分页功能。我一直在调用API多次,$http.get
诅咒系统不响应。例如,一旦我加载需要多次调用API的页面(例如50到80次,具体取决于页面数),几分钟后我所做的任何事情都不会响应,直到调用API几乎完成。我已经尝试了很多方法,但它不起作用。
$scope.loadAllPagedItems = function (category_uuid, max_pageitem, item_perpage) {
for (var a = 0 ; a < max_pageitem; a++) {
itemResource.findItems(category_uuid, item_perpage, a).then(function (response) {
if (response.data.data.length > 0) {
for (var a = 2 ; a < $scope.categories.length; a++) {
if ($scope.categories[a][0].category_uuid == response.data.data[0].category_uuid) {
for (var j = 0; j < response.data.data.length; j++) {
$scope.categories[a][0].data.push(response.data.data[j]);
}
}
}
}
}, function (error) {
console.log(error);
})
}
}
有什么方法可以做得更好吗?
答案 0 :(得分:0)
$scope.loadAllPagedItems = function(category_uuid, max_pageitem, item_perpage) {
var promise = $q.when([]);
for (let a = 0 ; a < max_pageitem; a++) {
promise = promise
.then(function(dataArray) {
var p = itemResource.findItems(category_uuid, item_perpage, a);
p = p.then(function (response) {
return dataArray.concat(response.data.data);
});
return p;
});
};
return promise;
};
上面的示例,按顺序执行XHRs并使用数组concat方法将已解析的数组合并为一个数组。
用法:
$scope.loadAllPagedItems(category, pages, itemsPerPages)
.then(function(finalArray) {
console.log(finalArray);
}).catch(function(response) {
console.log("ERROR ",response.status);
throw response;
});