Проверяет знание статических методов Promise и понимание различий между Promise.any и Promise.all.
В JavaScript промисы — это объекты, представляющие результат асинхронной операции. Для работы с несколькими промисами одновременно существуют статические методы, которые вызываются на самом конструкторе Promise, а не на экземпляре. Они позволяют комбинировать, ожидать или реагировать на результаты нескольких асинхронных задач.
Promise.all полезен, когда нужно дождаться выполнения всех параллельных операций, например, загрузки нескольких файлов или запросов к API, и только потом продолжить работу. Если один из запросов падает, весь процесс останавливается, что удобно для критичных сценариев, где нужны все данные.
Promise.any, наоборот, полезен, когда достаточно получить хотя бы один успешный результат, например, при обращении к нескольким зеркалам сервера или при выборе самого быстрого источника данных. Он игнорирует ошибки до тех пор, пока не появится хотя бы один успех.
const p1 = Promise.resolve(1);
const p2 = new Promise((resolve) => setTimeout(() => resolve(2), 100));
const p3 = Promise.reject('Ошибка');
// Promise.all — ждет все, отклоняется при первой ошибке
Promise.all([p1, p2])
.then(results => console.log('all:', results)); // [1, 2]
Promise.all([p1, p3])
.catch(err => console.log('all error:', err)); // 'Ошибка'
// Promise.any — ждет первый успех
Promise.any([p3, p2])
.then(result => console.log('any:', result)); // 2
Promise.any([p3, Promise.reject('Другая ошибка')])
.catch(err => console.log('any error:', err)); // AggregateErrorВыбор между Promise.all и Promise.any зависит от сценария: если нужны все результаты и ошибка критична — используйте Promise.all; если достаточно одного успешного результата и ошибки можно игнорировать — используйте Promise.any. Эти методы делают работу с параллельными асинхронными операциями более гибкой и выразительной.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию