Затримка багатофункціональних дзвінків за допомогою міток
Це рішення, з яким я працюю. Це затримає виконання будь-якої функції, яку ви хочете . Це може бути запит пошуку клавіш, можливо швидке натискання на попередні або наступні кнопки (які в іншому випадку будуть надсилати декілька запитів, якщо швидко натискати постійно, і не використовуватись все-таки). При цьому використовується глобальний об'єкт, який зберігає кожен час виконання та порівнює його з самим поточним запитом.
Таким чином, результат полягає в тому, що тільки цей останній клацання / дія буде фактично викликаний, оскільки ці запити зберігаються в черзі, що після виклику 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);});
Результати виклику однієї і тієї ж функції, але затримка їх незалежно, оскільки їх мітки відрізняються