我已经尝试了几种方法,使用.done和.then,我得到相同的结果 - 数据似乎填充数组就好了(我可以在#34; pushTeamMembers&#34中调用数组内部的数组;),但是当我尝试在主流程中查看它时,数组是空的。
我认为它可能是某种范围问题,但如果我在最后一个console.log之前稍微暂停(设置间隔),它会很有效 - 这似乎意味着程序在数据之前显示数据实际上被拉下来了。感谢。
var siteurl = _spPageContextInfo.webAbsoluteUrl;
var teamMembers = [];
// ********** Ajax query
var teamListData = $.ajax({
type: 'get',
url: siteurl + "/_api/web/lists/getbytitle('The Team')/items",
headers: { "Accept": "application/json; odata=verbose" }
});
// ********** Ajax query deferred ".then" handler
teamListData.then(function (value) {
$.each(teamListData, function(i, item) {
var thisNameId = teamListData[i].NameId;
var workStream = teamListData[i].Title;
var member = {id: thisNameId, workstream: workStream};
pushTeamMembers(member);
});
});
// ********** Push onto array
function pushTeamMembers(member)
{
teamMembers.push(member);
// ********** This shows that the array is populated.
console.log(teamMembers);
}
// ********** This shows that the array is empty - unless I put a
// slight pause here ( set interval ).
console.log(teamMembers);
答案 0 :(得分:-1)
更新:我认为我对此问题的看法不正确。在.done函数中包含数据就是我所需要的。程序将继续并在.done函数完成之前执行第二个console.log,因此尝试访问程序流中的数据,在延迟上下文的上下文之外,会使其延迟。我只需要在延迟上下文中保持链接函数,而不是回退到程序流程中。我想这很明显,我很想删除我的帖子,但也许这会帮助像我这样的新手。