Показать сообщение отдельно
  #1 (permalink)  
Старый 31.08.2021, 13:25
Аспирант
Отправить личное сообщение для dc65k Посмотреть профиль Найти все сообщения от dc65k
 
Регистрация: 19.05.2020
Сообщений: 46

Как реализовать задачу с одновременными запросами на сервер?
Всем привет. Есть функция, она принимает на вход массив адресов на которые будет происходить запрос и количество максимальных запросов (количество максимальных запросов в очереди). Если количество запросов больше чем второй параметр (очередь заполнена), то мы должны дождаться когда можно будет уменьшить очередь и продолжить делать следующие запросы по описанному принципу заполнения очереди.
Ниже я написал начало решения, вопрос именно в том как в коде написать очистку очереди и продолжение выполнение запросов?
const sendRequests = (requests, maxRequestsCount) => {
   
    return new Promise(resolve => {

        const responses = [];

        let requestsCount = 0;

        for (let i = 0; i < requests.length; i++) {
            const request = requests[i];

            requestsCount += 1;

            if (requestsCount !== maxRequestsCount) {
                makeRequest(request);
            }
        }

        function makeRequest(url) {
            return fetch(url)
                .then(result => result.json())
                .catch(error => error)
                .then(result => {
                    responses.push(result);
                    resolve(responses);
                });
        }
    });
}

console.log(
    sendRequests([
        'https://jsonplaceholder.typicode.com/todos/2',
        'https://jsonplaceholder.typicode.com/todos/4',
        'https://jsonplaceholder.typicode.com/todos/10',
        'https://jsonplaceholder.typicode.com/todos/18'
    ], 3).then(response => {
        console.log(response);
    })
);
Ответить с цитированием