Показать сообщение отдельно
  #4 (permalink)  
Старый 31.08.2021, 18:24
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Может такой вариант
const sendRequests = (requests, maxRequestsCount) => {
    
    return new Promise(resolve => {
 
        const responses = Array.from({length: requests.length}, _ => null);
 
		let curUrlInd = 0;
		let requestDone = 0;
 
        for (let i = 0; i < maxRequestsCount; i++) {
            makeRequest(requests[i], i);
        }

        curUrlInd = maxRequestsCount; 

        function makeRequest(url, n) {
            return fetch(url)
                .then(result => result.json())
                .catch(error => error)
                .then(result => {
                    responses[n] = result;
                })
                .finally (() => {
					if (curUrlInd < requests.length) {
						makeRequest(requests[curUrlInd], curUrlInd);
						curUrlInd++;
					}
					requestDone ++;
					if (requestDone === requests.length) {
						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);
    })
);

Последний раз редактировалось voraa, 31.08.2021 в 19:18.
Ответить с цитированием