Задержка многофункциональных вызовов с использованием меток
Это решение, с которым я работаю. Это задержит выполнение ЛЮБОЙ функции, которую вы хотите . Это может быть поисковый запрос по нажатию клавиши, может быть, быстрый щелчок по предыдущей или следующей кнопке (который в противном случае отправлял бы несколько запросов, если быстро нажимать непрерывно, и не использовался бы в конце концов). При этом используется глобальный объект, который сохраняет каждое время выполнения и сравнивает его с самым последним запросом.
Таким образом, в результате будет вызван только последний щелчок / действие, поскольку эти запросы хранятся в очереди, то есть после вызова X миллисекунд, если в очереди не существует другого запроса с такой же меткой!
function delay_method(label,callback,time){
if(typeof window.delayed_methods=="undefined"){window.delayed_methods={};}
delayed_methods[label]=Date.now();
var t=delayed_methods[label];
setTimeout(function(){ if(delayed_methods[label]!=t){return;}else{ delayed_methods[label]=""; callback();}}, time||500);
}
Вы можете установить собственное время задержки (необязательно, по умолчанию 500 мс). И отправьте аргументы вашей функции в «режиме закрытия».
Например, если вы хотите вызвать нижеуказанную функцию:
function send_ajax(id){console.log(id);}
Чтобы предотвратить несколько запросов send_ajax, вы задерживаете их, используя:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Каждый запрос, использующий метку «дата проверки», будет запускаться только в том случае, если в течение 600 миллисекунд не было сделано ни одного другого запроса. Этот аргумент не является обязательным
Пометьте независимость (вызывая ту же целевую функцию), но запустите обе:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Приводит к вызову одной и той же функции, но задерживает их независимо, потому что их метки отличаются