2016-07-15 1 views
-1

Я видел много вопросов о том, как поставить задержку или спать в javascript. Я пробовал все, что просто не мог заставить работать код, как хотелось.Задержка в javascript

Таким образом, я получаю как 500 запросов для друзей на facebook, вроде бы раздражающих, принимающих их один за другим. Поэтому я нашел скрипт, который принимает все мои запросы друзей сразу. Я пробовал установленный тайм-аут и коды сна, которые фактически выполняют эту работу, но я хочу поставить задержку между каждым действием. При установке таймаута это просто задерживает весь скрипт. Так что я хочу сделать так:

Confirm
Задержка 1сек
Confirm
задержка 1сек
подтверждают
1сек deleay ...

Вот мой оригинальный сценарий:

var field = document.getElementsByName("actions[accept]"); 
for (i = 0; i < field.length; i++) 
    field[i].click() ; 
+1

вопрос в том, почему вы получите много запросов для друзей и почему вы принимаете их всех, даже не проверяя, знаете ли вы их? – luschn

+0

Основная заинтересованность Facebook: –

+1

Вы знаете, что вам не разрешено использовать профили пользователей для рекламных материалов, не так ли? просто говорю. учетные записи пользователей должны использоваться с реальным именем реального человека, и их нельзя использовать по коммерческим причинам. Кроме того, друзья ограничены до 5000 для профилей пользователей. – luschn

ответ

0

Правильное решение вашей проблемы м будет следующим:

var field = document.getElementsByName("actions[accept]"); 
var index = 0; 
function acceptFriends(){ 
    if(index<field.length){ 
     field[index].click(); 
     index++; 
     setTimeout(acceptFriends,1000); 
    } 
} 
acceptFriends(); 
+0

Спасибо, что это просто идеально подходит для меня! –

0
var field = document.getElementsByName("actions[accept]"); 

for (i = 0; i < field.length; i++){ 
    setTimeout(function(){field[i].click()},(i*1000)) 
} 
+0

Опять же, setInterval - это функция async :) он не ждет –

+0

обновил его сейчас будет работать –

+0

очень приятно :) Мне нравится ваше решение –

1

Вот еще одно решение для этого, мы должны вызвать немедленную функцию с «я» парам, чтобы получить его исправить в SetTimeout:

var field = document.getElementsByName("actions[accept]"); 

for (var i = 0; i < field.length; i++) { 
    (function(i){ 
    setTimeout(function() { 
     field[i].click(); 
    }, i * 1000); 
    })(i); 
} 

Но я предлагаю использовать рекурсивный ответ выше как лучшее решение для этого, потому что хорошая практика не использовать функции в цикле. Вот ссылка: https://jslinterrors.com/dont-make-functions-within-a-loop

+0

ваше решение не работает :) https://repl.it/CcTa/1 здесь, попробуйте :) –

+0

как вы его проверяете, мужчина? https://repl.it/CcTa/2 –

+0

@MarkoMackic вы забыли поставить вывод здесь, и, пожалуйста, узнайте немного javascript :) –

Смежные вопросы