我注意到在使用REST调用列表时,SharePoint有100个项目的限制。我试图让它工作,所以它进行批量调用(即如果第一个调用是133个项目,进行两个调用,所以第一个接收前100个,第二个接收最后33个。)
这是我的(编辑过的)代码:
this.getListItem = function ($scope, listName, url, SPHostUrl, SPAppWebUrl) {
return getListItem(listName, url, SPHostUrl, SPAppWebUrl).done(function(data) {
return data;
});
};
我从SharePoint中检索数据的功能。
function getListItem(listName, url, SPHostUrl, SPAppWebUrl) {
var deferred = $.Deferred();
var resultsArray = [];
var scriptbase = SPHostUrl + "/_layouts/15/";
jQuery.getScript(scriptbase + "SP.RequestExecutor.js", getOrderDetails);
function getOrderDetails() {
var executor = new SP.RequestExecutor(SPAppWebUrl);
executor.executeAsync(
{
url: url,
method: "GET",
dataType: "json",
headers: {
Accept: "application/json;odata=verbose"
},
success: function (data) {
var response = JSON.parse(data.body);
resultsArray.push(response.d.results);
if (response.d.__next) {
url = response.d.__next;
getOrderDetails(); <- Runs multiple times if __next is true
}
deferred.resolve(resultsArray)
},
error: function (data, errorCode, errorMessage) {
alert(errorMessage);
}
}
);
}
return deferred.promise();
}
这有效(它获取两个调用中的所有列表项,首先给出100和第二个最后33个),但不返回我预期的数据。我使用承诺错了吗?或者是.done在服务电话上毁了它?
编辑:代码运行正常。一件事是我没有正确处理resultsArray.push()。需要循环结果数组而不是直接推送它(只返回两个索引,因为有两个调用。现在它返回133):
$.each(response.d.results, function (index, item) {
resultsArray.push(item);
});
答案 0 :(得分:0)
您的代码对我来说没问题。我只能说我总是使用自己
functionCall(param)
.then(
function () {
console.log('success');
},
function (sender, args) {
console.log('fail');
});
也许这值得一试?
这也可能是一个有趣的话题:jQuery deferreds and promises - .then() vs .done()
答案 1 :(得分:0)
代码工作正常。一件事是我没有正确处理resultsArray.push()。需要循环结果数组而不是直接推送它(只返回两个索引,因为有两个调用。现在它返回133):
$.each(response.d.results, function (index, item) {
resultsArray.push(item);
});