我无法使用jQuery将帐户下的用户列表添加到数组中。然后返回承诺,在继续之前收集所有用户。问题是用户数量是未知的,因此我有一个循环将轮询API直到返回最后一页用户。我见过的大多数解决方案和示例要么为AJAX请求存储一系列URL,要么在彼此复制/粘贴样式之上存储承诺。到目前为止,这是我的代码,我遇到的问题是,当循环完成时,我似乎无法返回单个承诺。
感谢任何帮助。
retArr = [];
var dfd = $.Deferred();
var p = 1, pp = 100
function get_users(p) {
$.ajax({
method : 'get',
dataType : 'json',
url : '/api/accounts/'+ ACCOUNT_ID + '/users',
cache : true,
data : { 'per_page':pp, 'page':p }
}).done(function(res, status, xhr) {
for(var i in res) {
retArr.push({
'user_id' : parseInt(res[i].id),
'name' : res[i].name,
'email' : res[i].email
})
}
// get more until the end
if(xhr.getResponseHeader('Link').indexOf('rel="next"') != -1) {
console.log('get more')
get_users(p+1)
// got all, move on
} else {
console.log('return promise')
return dfd.resolved;
}
})
}
get_users(p)
$.when( get_users(p) ).done(function() {
console.log(retArr)
});