Подтвердить что ты не робот

Angular $рекурсивный запрос ресурсов

Из API, над которым я работаю, мне нужно взять 2 разных списка, и мне нужно взять куски из 20 элементов, чтобы избежать тайм-аутов сервера.

На самом деле я создал это:

Items1.query().$promise
.then(function (data) {
  $scope.items1 = data.list;
  return Items2.query().$promise;
})
.then(function (data) {
  $scope.items2 = data.list;
});

С помощью этого кода я загружаю весь список объектов.

Оба запроса возвращаются:

{
    list: [...],
    next: true,
    limit: 20,
    last: 20
}

В основном это система разбиения на страницы.

Обе службы выглядят так:

App.factory('Items1', ['$resource',
    function($resource) {
        return $resource('items1/:item1Id', { storeId: '@id'
        }, {
            query: {
                method: 'GET',
                isArray: false
            },
            update: {
                method: 'PUT'
            }
        });
    }
]);

Я действительно не знаю, как сделать рекурсивную функцию с $resource, чтобы нажимать эти элементы в кусках по 20.

4b9b3361

Ответ 1

Я написал пример jsfiddle, чтобы показать рекурсивный promises. Преобразуя его для вашего примера, он выглядит примерно так:

function getList(resource, list, last) {
    return resource.query({last: last}).$promise.then(function(data){
        list = list.concat(data.list);
        if (data.next) {
            return getList(resource, list, data.last);
        }
        return list;
    });
}

getList(Items1, [], 0).$promise.then(function(list) {
    $scope.items1 = list;
});
getList(Items2, [], 0).$promise.then(function(list) {
    $scope.items2 = list;
});

Вам нужно будет изменить ресурсы angular, чтобы вы могли передать параметр last в вызове API. Я предполагаю, что API, если он предоставлен с этим параметром, вернет следующий раздел, начиная с него.