LINUX.ORG.RU

Ограничение количества AJAX-запросов в секунду

 , , ,


0

1

Здравствуйте, товарищи!

inb4: товарищи в овраге лошадь доедают

А теперь по существу. Есть одно расширение для Chrome/ium, которое использует часто однотипные AJAX-запросы к API Небезызвестной Социальной Сети. Проблема в том, что Небезызвестной Социальной Сетью установлено ограничение запросов, равное 3 штукам в секунду. Казалось бы, что необычного, но в JS нет своего аналога sleep(millisecs) или wait(millisecs)! А встроенный setTimeout() и jQuery'евский delay() работают асинхронно, чего в моём случае никак допустить нельзя. Более того, я пробовал следующий код:

$.queue(function(){ $.getJSON(vk_api + "utils.resolveScreenName", {
		"screen_name": target,
		"v": "5.24"
	}).delay(300).done(function(data){ console.log(data); target_url = data.response.object_id; }).dequeue(); });
$.queue(function(){ $.each(filter_arr, function(i, item){
		$.getJSON(vk_api + "utils.resolveScreenName", {
			"screen_name": item,
			"v": "5.24"
		}).delay(300*i).done(function(data){
			console.log(data); 
			public_filter.push(data.response.object_id);
		}); 
}).dequeue(); });

Здесь время задержки наращивается в процессе выполнения, и по идее, должен создаваться эффект синхронизации, но проверить я это не могу, бо console.log'и не выводят ровным счётом ничего, хотя без delay() всё выводили.

Что же делать, товарищи? Любой костыль хорош, лишь бы работало.

Я тут слышал, мол, можно AJAX-запрос на PHP-страницу отправлять, в которой прописан sleep(). Но это лютый костыль.

Ответ на: комментарий от ya-betmen

Попробую. Ох, и приходится же говнокодить из-за казалось бы, простой задачи.

brotheroftux
() автор топика
Ответ на: комментарий от anonymous

Пробовал. Там получается ещё большая мешанина вида

setInterval(function(){
$.getJSON(link, { params }).done(function(data){
setInterval(function(){
$.getJSON(link, { param1: data.response.chototam}).done(function(data){

// и так далее
brotheroftux
() автор топика
(function poll() {
    setTimeout(function () {
        $.getJSON('/your-url', function (e) {
            // do what you need
            poll();
        });
    }, 334 /*ms*/);
}());

Не?

noomorph
()
Последнее исправление: noomorph (всего исправлений: 1)
Ответ на: комментарий от brotheroftux

где тут

setInterval(function(){
$.getJSON(link, { params }).done(function(data){
setInterval(function(){
$.getJSON(link, { param1: data.response.chototam}).done(function(data){
пул запросов?

ya-betmen ★★★★★
()
Ответ на: комментарий от brotheroftux

Значит я по косоглазию промазал читая ответ.

ya-betmen ★★★★★
()
Ответ на: комментарий от anonymous

Но оно ведь просто отсеивает те запросы, которые не вовремя, а не задерживает их выполнение?

brotheroftux
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.