我正在尝试运行一些代码,一旦数组的所有jqXHR元素都完成(成功或失败)。
你可以在这里看到完整的代码:http://jsfiddle.net/Lkjcrdtz/4/
基本上,我期望从这里开始使用always钩子:
$.when
.apply(undefined, reqs)
.always(function(data) {
console.log('ALL ALWAYS', data);
});当堆积在那里的所有请求都已成功或失败时运行。目前,您可以在控制台中观察到较早地记录了ALL ALWAYS。
发布于 2018-12-21 23:15:25
现代浏览器的一个简单解决方案是结合使用较新的fetch() API和Promise.all()。
var makeReq = function(url, pos) {
var finalUrl = url + pos;
// intentionally make this request a failed one
if (pos % 2 === 0) {
finalUrl = "https://jsonplaceholder.typicode.com/423423rfvzdsv";
}
return fetch(finalUrl).then(function(resp) {
console.log('Request for user #', pos);
// if successful request return data promise otherwise return something
// that can be used to filter out in final results
return resp.ok ? resp.json() : {error: true, status: resp.status, id: pos }
})
};
// mock API
var theUrl = "https://jsonplaceholder.typicode.com/users/";
var reqs = [];
for (var i = 1; i <= 5; i++) {
reqs.push(makeReq(theUrl, i));
}
Promise.all(reqs).then(function(results) {
console.log('---- ALL DONE ----')
// filter out good requests
results.forEach(function(o) {
if (o.error) {
console.log(`No results for user #${o.id}`);
} else {
console.log(`User #${o.id} name = ${o.name}`);
}
})
})
https://stackoverflow.com/questions/53886279
复制相似问题