Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выполнение кода с интервалами (https://javascript.ru/forum/misc/53571-vypolnenie-koda-s-intervalami.html)

solomon2 09.02.2015 17:19

Выполнение кода с интервалами
 
При загрузке страницы со нее собираются все ссылки в массив.
Далее ссылки необходимо частями отправить на сервер ajax-ом, с интервалами между каждой 10-й отправкой, чтобы не вешать страницу браузера, т.к. от сервера еще получается ответ по каждой из ссылок. (10 ссылок отправили, перерыв 5 секунд, далее следующие 10 и т.д.)

Ниже код, никак не могу разобраться как верно написать. В текущем варианте код не попадает в эту часть if(i !=0 && i%10==0). Помогите, пожалуйста, разобраться, мозги уже плавятся..

var nCut = 0,
	hrefArr2 = [];

cutDatalinks('');

function cutDatalinks(hrefArr2){
	var cutHrefArr = []; // минимассив для отправки ссылок частями
	if(hrefArr2==''){
		hrefArr2 = hrefArr; // hrefArr - массив со всеми ссылками собранными со страницы
	}
	for(i=nCut;i<hrefArr2.length;i++){
		if(i==10){
			//ставим интервал через который запустить эту же функцию
			var cutInterval = setInterval(cutDatalinks(hrefArr2), 5000);		
		}
		if(i==hrefArr2.length-1){
			//прекратить работу интервалов
			clearInterval(cutInterval);
			//передаем минимассив cutHrefArr в метод, который направляет ссылки серверу
			getData('', '', cutHrefArr);
			//обнуляем минимассив cutHrefArr
			cutHrefArr.length = 0;
			nCut = 0; //устанавливаем начало счетчика
		}
		cutHrefArr.push(hrefArr2[i]);
		console.log('1 - ' + i);
		if(i !=0 && i%10==0){// целое число
			console.log('2 - ' + i);
			//передаем минимассив cutHrefArr в метод, который направляет ссылки серверу
			getData('', '', cutHrefArr);
			//обнуляем минимассив cutHrefArr
			cutHrefArr.length = 0;
			nCut = nCut + 10; //устанавливаем начало счетчика
			break;
		}
	}
}

ksa 09.02.2015 23:18

Цитата:

Сообщение от solomon2
никак не могу разобраться как верно написать

Как вариант...

(function(){
	var arr=[1,2,3,4,5,6,7,8,9];
	var n=5;
	var l=arr.length;
	var start=0;
	setTimeout(sendData,1000);
	function sendData(){
		var end=start+n;
		end=(end>l)? l: end;
		var a=arr.slice(start,end);
		alert('Шлем '+a);
		start=end;
		if (start<l) {
			setTimeout(sendData,1000);;
		};
	};
})();

solomon2 10.02.2015 09:42

Огромное Вам спасибо!

Небольшой баг:
start+=end;

Верно будет:
start=end;

ksa 10.02.2015 09:54

Цитата:

Сообщение от solomon2
Верно будет:
start=end;

Да, да... :yes:
Исправил.


Часовой пояс GMT +3, время: 04:31.