返回 SharePoint 列表 REST 的递归提取结果

Returning results of a recursive fetch for SharePoint List REST

我有这个功能,但结果 return 未定义。好像我遗漏了一些没有填满 return.

的东西

我已经尝试了一些方法,但结果仍然相同。我错过了什么?

function spGetListColumns(listTitle, siteURL = _spPageContextInfo.webAbsoluteUrl) {
        var listGetURL = siteURL + "/_api/web/lists/getbytitle('" + listTitle + "')/fields?$select=Title,TypeAsString,TypeDisplayName,Required&$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);
            });
        }
    }

fetch返回的结果是一个promise。我对您的代码做了一些更改:

function spGetListColumns(listTitle, siteURL = _spPageContextInfo.webAbsoluteUrl) {
    var listGetURL = siteURL + "/_api/web/lists/getbytitle('" + listTitle + "')/fields?$select=Title,TypeAsString,TypeDisplayName,Required&$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)})