Я понял в чем был не прав. В случае с
jQuery никаких аналогов
Promise.allSettled не нужно никогда.
Для всех возможных случаев достаточно одного
jQuery.when() - просто потому что в эту функцию мы всегда передаем
Deferred, а передаваемый
Deferred мы всегда можем подрихтовать при помощи
jQuery.always() так, чтобы он завершался через
deferred.resolve()
Допустим, нам надо сделать 3 запроса одновременно и получить все результаты, при этом нам не важно успешно завершились запросы или какие-то из них были завершены с ошибкой. Если использовать
jQuery.when() в лоб, то разумеется мы не сможем получит все результаты, так как
jQuery.when() завершится при получении первого неуспешного результата, проигнорировав все остальные запросы, но если передавать в него немного поправленный
Deferred, то никаких проблем с обработкой всех результатов не предвидится:
// Ссылки:
var urls = [
'/link1',
'/',
'/link3'
];
var deferreds = []; // Массив для записи Deferred
// Перебираем ссылки в цикле jQuery:
jQuery.each(urls, function(num, link) {
// Создаем новый Deferred и
// записываем его наш массив:
deferreds.push(jQuery.Deferred());
// Отправляем запрос, указав через
// always, чтобы после завершения он
// успешно завершил созданный ранее Deffered:
jQuery.ajax(link).always(deferreds[num].resolve);
});
// Используем when, чтобы дождаться завершения всех Deferred:
jQuery.when.apply($, deferreds).done(function() {
// После завершения всех Deferred выведем результаты запросов:
console.log('Запросы успешно отправлены, их результаты ниже:');
console.dir(arguments);
});
Очевидно, что вместо
jQuery.ajax может использоваться любая другая функция возвращающая
Deferred, т. е. этот принцип можно применять везде и для всего. Конечно промисы применять было бы в удобнее, чем объекты
Deferred, но в защиту
Deferred скажу, что он может все то же, что и промисы, включая возможность использовать
async / await + у него есть некоторые фишки, которых нет у промисов.