我正在为我的工作制作一个功能,而且我已经走到了十字路口。我是Ajax的新手,我正在尝试实现一个队列来手动处理Ajax请求,而不是浏览器。我做了一些研究并查看了this answer,但是我要发送的请求不会事先声明,因为整个网站都是动态的。有没有办法在那里使用代码与此处描述的JQuery.when()函数一起使用?我在思考:
$.when(d1).done(function(var d2=$.Deferred()) {
d2.resolve();
}
d1.resolve();
但是这个实现对我不起作用。 感谢您提供的任何帮助!
答案 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;
support for ES6 promises还不是很普遍,所以我会使用一个转换器,以防万一,但看起来Promise.all可以帮助你。