Promise.all: синхронизация нескольких запросов в JavaScript
Promise.all() - это метод, который позволяет объединить несколько обещаний (promises) в одно обещание. Это очень полезно, когда требуется выполнить несколько асинхронных операций параллельно и дождаться, пока все они завершатся.
Promise.all() принимает массив обещаний в качестве аргумента и возвращает новое обещание, которое выполнится, когда все указанные обещания завершатся. Результатом выполнения Promise.all() будет массив значений, каждое из которых соответствует результату соответствующего обещания.
Пример кода с Promise.all():
const promise1 = Promise.resolve(10);
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 2000, 'Hello'));
const promise3 = fetch('https://api.github.com/users/mojombo');
Promise.all([promise1, promise2, promise3])
.then(values => {
console.log(values);
})
.catch(error => console.error(error));
В этом примере кода мы задали три обещания:
- promise1 - выполнится немедленно, возвращая значение 10
- promise2 - выполнится через 2 секунды, возвращая строку 'Hello'
- promise3 - выполнится асинхронно, отправляет запрос на сервер GitHub API и возвращает промис, который разрешится соответствующими данными
Затем мы объединяем эти обещания с помощью Promise.all(), который будет ждать, пока все три обещания разрешатся. Когда это произойдет, массив со значениями каждого промиса будет передан в функцию, переданную в качестве аргумента для обработки результатов. Конечно, если одно из обещаний завершится неудачно, Promise.all() сразу же отклонится.
В данном случае, мы можем увидеть в консоли массив со значениями, которые были получены различными способами, когда все обещания были выполнены.