从API加载分页数据

时间:2017-10-01 09:35:26

标签: angularjs angular-promise angularjs-http

我正在开发一个系统,目前要求我从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);
        })
    }
}

有什么方法可以做得更好吗?

1 个答案:

答案 0 :(得分:0)

从异步API中顺序检索分页数据

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