Рекурсивный вызов SPO Rest API для большой библиотеки документов (порог 5k)

#javascript #jquery #arrays #rest #sharepoint-online

#javascript #jquery #массивы #rest #sharepoint-онлайн

Вопрос:

У меня есть большая библиотека документов с файлами 50 тыс. В настоящее время я получаю сообщение об ошибке, что запрос превышает пороговое значение. Я добавил индексы и использовал все возможные фильтры при вызове rest api и все равно достиг порогового значения для запроса. Я читал, что рекурсивный вызов позволил бы мне обрабатывать пакеты по 5000 и объединять их в один и тот же результат. Я хочу отобразить выходные данные с использованием таблиц данных jquery, а параметры диапазона дат фильтра передаются из URL. Как добиться рекурсивных вызовов?

 $(document).ready(function() {   
    loadItems();
});    
    
  
function loadItems() {    
    var range = GetFromToValues("FromTo");    
    var oDataUrl = "SPO_Site/_api/web/lists/getbytitle('List_Name')/items?$top=5000amp;$select=Created,Regamp;$filter=" range "";    
    $.ajax({    
        url: oDataUrl,    
        type: "GET",    
        dataType: "json",    
        headers: {    
            "accept": "application/json;odata=verbose"    
        },    
        success: mySuccHandler,    
        error: myErrHandler    
    });    
}    
  
function mySuccHandler(data) {    
    try {    
          
        $('#table_id').DataTable({    
            "pageLength": 100,
            "dom": 'frtip',
            "aaData": data.d.results,
            "aoColumns": [  
            {"mData": "Created"},             
            {"mData": "Reg"}
            ]    
        });    
    } catch (e) {    
        alert(e.message);    
    }    
}    
    
function myErrHandler(data, errMessage) {    
    alert("Invalid date range");    
}   

        function GetFromToValues(param) {
            var url = window.location.href.slice(window.location.href.indexOf('?')   1).split('amp;');
            for (var i = 0; i < url.length; i  ) {
                var urlparam = url[i].split('=');
                if (urlparam[0] == param) {
                    return urlparam[1];
                }
            }
        }

 

Я могу создавать массивы из 5000, используя приведенный ниже код. Можно ли это объединить с моим кодом выше, чтобы сгенерировать таблицу данных jquery?

 var response = response || [];
var listURL = "SPO_Site/_api/web/lists/getbytitle('List_Name')/items?$top=5000amp;$select=*";
GetListItemsRecursive(listURL);
function GetListItemsRecursive(restURL) {
    $.ajax({
        url: restURL,
        method: "GET",
        contentType: "application/json;odata=verbose",
        headers: {
            "accept": "application/json;odata=verbose"
        },
        success: function (data) {
            response = response.concat(data.d.results);
            console.log(data);
            if(data.d.__next) {
                GetListItemsRecursive(data.d.__next);
            }
        },
        error: function (error) {
            console.error(error);
        }
    });
}```