将Ajax请求动态添加到队列

时间:2017-05-16 13:28:43

标签: javascript jquery ajax

我正在为我的工作制作一个功能,而且我已经走到了十字路口。我是Ajax的新手,我正在尝试实现一个队列来手动处理Ajax请求,而不是浏览器。我做了一些研究并查看了this answer,但是我要发送的请求不会事先声明,因为整个网站都是动态的。有没有办法在那里使用代码与此处描述的JQuery.when()函数一起使用?我在思考:

$.when(d1).done(function(var d2=$.Deferred()) {
    d2.resolve();
}
d1.resolve();

但是这个实现对我不起作用。 感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以尝试在ES6 promises中包装请求,然后将它们添加到数组中,并以数组作为参数调用Promise.all()。通过文档:

  

Promise.all()方法返回一个在什么时候解析的Promise   可迭代参数中的所有promise都已解决或拒绝   由于第一个承诺拒绝的原因。

它不关心请求的来源,只是他们要么解决要么拒绝。

它看起来像这样:



        let promiseArray = [];
        for (let i = 0; i < 3; i++) {
            let promise = new Promise((resolve, reject) => {
                $.ajax({
                    url: url,
                    type: 'GET',
                    success: data => resolve(data),
                    error: err => reject(err)
                });
            });
            promiseArray.push(promise);
        }
        Promise.all(promiseArray).then((data) => {
            //Will return an array of the successful requests, or will reject on the first rejected request
            console.log(data);
        });
&#13;
&#13;
&#13;

support for ES6 promises还不是很普遍,所以我会使用一个转换器,以防万一,但看起来Promise.all可以帮助你。