javascript - jQuery .when() :是否有一个回调函数会在所有请求完成时触发,而不管它们的状态如何?
问题描述
我正在使用.when()
jQuery 的方法并将多个 Ajax 请求作为参数传递。对于每一个ajax请求,如果失败并进入ajax的错误回调函数,我就是将服务器抛出的错误信息推送到一个全局数组中。
我想要的是一个回调,当所有请求完成时都会触发,无论所有请求是成功还是失败。在这个有问题的回调中,我将打印已推送到我的全局数组中的所有错误消息。
根据我的理解和我的测试,.then()
只有在所有请求都已解决时.fail()
才会触发回调,并且一旦我们有拒绝就会触发回调,这不允许我获得所有错误消息,而只能获得第一个错误消息。
sources = [ 'posts', 'comments', 'albums', 'photos' ];
requests = [];
ajaxErrors = [];
$.each(sources, function(idx, val) {
requests.push(
$.ajax({
type : 'GET',
url : 'https://myapi/' + val,
success : function(data) {},
error : function(data) {
ajaxErrors.push(data.message);
}
})
);
});
$.when
.apply($, requests)
.then(function() {
// Only fired when all requests are successful
})
.fail(function() {
console.log(ajaxErrors);
// If all request failed, ajaxErrors only has 1 element : ['Error retrieving posts, connexion timeout']
});
解决方案
推荐阅读
- python - Pillow、OpenJPEG(用于 jpeg2000)和 anaconda
- c++ - 在小数点后有很多尾随零后具有非零数字的数字的上限值
- python - 在熊猫中应用条件后如何将结果保存到新的数据框中?
- python - SQLAlchemy OperationalError no such table - 与 sqlite uri 混淆
- ruby-on-rails - 如何在 Docker 容器上的 Rails 应用程序中运行命令行工具?
- git - 根据提交而不是目录或文件类型拆分存储库
- angular - ngx-formly:如何为 dateTimePicker 等自定义控件正式触发模糊事件?
- highcharts - 将 y 轴从直线内的哑铃图移动
- python - boto3:启用 CDN 时如何与 DigitalOcean S3 Spaces 交互
- docker - Docker apache guacamole - GUACAMOLE_HOME 不会改变