Возврат результатов рекурсивной выборки для остальных списков SharePoint

#javascript #sharepoint

Вопрос:

У меня есть эта функция, но результаты возвращаются неопределенными. Похоже, я упускаю что-то, что не соответствует возврату.

Я попробовал несколько вещей, но все равно получил те же результаты. Чего мне не хватает?

 function spGetListColumns(listTitle, siteURL = _spPageContextInfo.webAbsoluteUrl) {
        var listGetURL = siteURL   "/_api/web/lists/getbytitle('"   listTitle   "')/fields?$select=Title,TypeAsString,TypeDisplayName,Requiredamp;$filter=Hidden eq false and ReadOnlyField eq false";
        var getOptions = {
            method: 'GET',
            headers: new Headers({
                'Accept': 'application/json; odata=verbose',
                'content-type': 'application/json; odata=verbose'
            })
        };

        var spResults = [];
        spGetItems(listGetURL);

        function spGetItems(newListURL) {
            return fetch(newListURL, getOptions).then(response => response.json()).then(data => {
                spResults = spResults.concat(data.d.results);
                if (data.d.__next) {
                    newListURL = data.d.__next;
                    return spGetItems(newListURL);
                } else {
                    return spResults;
                }
            }).catch(error => {
                console.error(error);
            });
        }
    }
 

Ответ №1:

Результат, возвращаемый в fetch, является обещанием. Я немного изменил ваш код:

 function spGetListColumns(listTitle, siteURL = _spPageContextInfo.webAbsoluteUrl) {
    var listGetURL = siteURL   "/_api/web/lists/getbytitle('"   listTitle   "')/fields?$select=Title,TypeAsString,TypeDisplayName,Requiredamp;$filter=Hidden eq false and ReadOnlyField eq false";
    var getOptions = {
        method: 'GET',
        headers: new Headers({
            'Accept': 'application/json; odata=verbose',
            'content-type': 'application/json; odata=verbose'
        })
    };

    var spResults = [];
    return spGetItems(listGetURL)
    function spGetItems(newListURL) {
        return fetch(newListURL, getOptions).then(response => response.json()).then(data => {
            spResults = spResults.concat(data.d.results);
            if (data.d.__next) {
                newListURL = data.d.__next;
                spGetItems(newListURL);
            } else {
                console.log(spResults);
                return spResults
            }
        }).catch(error => {
            console.error(error);
        });
    }
}
 

Вызовите функцию spGetListColumns:

 spGetListColumns('List1').then(res=>{console.log(res)})
 

Комментарии:

1. Я думаю, что это 1 строка, которую я не пытался вернуть! Я сходил с ума, выясняя это. Спасибо!