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

Сообщение от squid
Примерный мой алгоритм
Ну примерно так надо
$ajax({
    data: {ids},
    onsuccess: function( res ) {
        request(res.lists, res.count);
    }
})

function request(res, count){

	let t0 = performance.now();

	// Если от t0 прошло меньше 1 сек, делаем задержку до 1 сек.
	const delay = () {
		const t = performance.now() - t0;
		dt = 1000 - (t - t0);
		const t0 = t;
		return new Promise ((resp) => {
			if (dt > 0) 
				setTimeout (resp, dt);
			else 
				resp();
		})
	}

	// Запрос к серверу
	const getajax (data) {
		reurn new Promise ( (resp() => {
			$ajax({
				data: {data},
				onsuccess: function(ret) {
					resp(ret);
				}
			})
		})
	}

	let p = Promise.resolve();

	for (let i = 0; i < res.length; i++) {
		// После каждых 3 запросов, делаем задержку, если необходимо
		if (i && i % 3 === 0) p = p.then ( () => delay () );
		
		p = p
			.then ( () => getajax (res[i]))
			.then ( (ret) => {document.getElementById("title").innerHTML = ...})
	}
}
Ответить с цитированием