Що таке Promise.all?
Метод Promise.all є потужним інструментом для паралельного виконання кількох асинхронних операцій у JavaScript. Синтаксично він приймає ітерований об'єкт, найчастіше масив, що містить проміси, наприклад, у вигляді конструкції Promise.all([p1, p2, p3]), і запускає їх одночасно, а не послідовно. Це кардинально підвищує продуктивність додатків, коли вам потрібно запитати незалежні дані з кількох джерел.
Головна особливість цього методу полягає в тому, що він чекає всі promises перед тим, як продовжити виконання подальшого коду. Коли кожен із переданих промісів успішно завершується, метод повертає масив результатів, де кожен елемент відповідає результату виконання вихідного промісу в тому ж порядку, в якому вони були передані у вхідний масив. Це дуже зручно для деструктуризації отриманих даних, наприклад, під час одночасного завантаження профілю користувача, списку його замовлень і налаштувань інтерфейсу.
Проте даний підхід має критичну особливість, яку необхідно враховувати під час проєктування архітектури: він відхиляється за першої ж помилки. Якщо хоча б один із промісів у масиві завершиться з помилкою (перейде в стан rejected), весь Promise.all негайно припиняє очікування решти й повертає цю помилку. Інші проміси при цьому продовжують виконуватися у фоновому режимі, але їхні результати будуть проігноровані. Тому Promise.all ідеально підходить для завдань, де всі запити критично важливі для роботи екрана, і частковий успіх не має сенсу.