Etiketleri Kullanarak Çok İşlevli Çağrıları Geciktirme
Birlikte çalıştığım çözüm bu. İstediğiniz HERHANGİ bir işlevde yürütmeyi geciktirir . Tuş takımı arama sorgusu olabilir, belki önceki veya sonraki düğmelere hızlı tıklama (aksi takdirde sürekli olarak hızlı bir şekilde tıklandığında birden fazla istek gönderir ve sonuçta kullanılmaz). Bu, her yürütme süresini depolayan ve bunu en güncel istekle karşılaştıran genel bir nesne kullanır.
Böylece sonuç, yalnızca son tıklama / eylemin gerçekten çağrılmasıdır, çünkü bu istekler bir kuyrukta depolanır, X etiketli saniye sonra aynı etikete sahip başka bir istek yoksa kuyrukta çağrılır!
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);
}
Kendi gecikme sürenizi ayarlayabilirsiniz (isteğe bağlı, varsayılan değer 500 ms'dir). Ve işlev argümanlarınızı "kapanış tarzında" gönderin.
Örneğin, feryat işlevini çağırmak istiyorsanız:
function send_ajax(id){console.log(id);}
Birden fazla send_ajax isteğini önlemek için, bunları kullanarak geciktirirsiniz :
delay_method( "check date", function(){ send_ajax(2); } ,600);
"Kontrol tarihi" etiketini kullanan her istek, yalnızca 600 milisaniye zaman diliminde başka bir istek yapılmazsa tetiklenir. Bu argüman isteğe bağlıdır
Etiket bağımsızlığı (aynı hedef işlev çağrılır) ancak her ikisini de çalıştırın:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Aynı işlevi çağırmakla sonuçlanır, ancak etiketleri farklı olduğu için bağımsız olarak geciktirir