循环访问未知数量的请求后,单个jQuery承诺

时间:2018-04-09 14:47:03

标签: jquery promise

我无法使用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)
});

0 个答案:

没有答案