Я использую .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']
});