javascript - 知道数组的 jqXHR 何时全部完成
问题描述
jqXHR
一旦数组的所有元素都完成(成功或失败),我正在尝试运行一些代码。
你可以在这里看到完整的代码:http: //jsfiddle.net/Lkjcrdtz/4/
基本上我期待always
从这里的钩子:
$.when
.apply(undefined, reqs)
.always(function(data) {
console.log('ALL ALWAYS', data);
});
当堆积在那里的所有请求成功或失败时运行。目前,您可以在之前记录的控制台中进行观察ALL ALWAYS
。
解决方案
现代浏览器的一个简单解决方案是使用较新的fetch()
APIPromise.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}`);
}
})
})
推荐阅读
- mongodb - 无法访问 apache docker 服务器
- c# - 将位域从 C++ 移植到 C#
- javascript - 日期格式 Moment JS
- citrix - XenServer 7.6 - 90 天试用许可证无法激活
- ios - 将 UITableViewCell 的垂直压缩阻力优先级设置为 749
- arrays - 反应中的重置数组不会进入原始状态
- exchangewebservices - EWS API:我为会议调用 update_item 的任何内容,最终都会取消任何与会者的会议
- c++ - 为虚函数生成包装器
- c++ - C++ 中 extern "C" 的调用约定是什么?
- python - 通过 Django REST API POST 调用上传媒体文件(.mp4)时出现 MultiValueDictKeyError