विलंब मल्टी फंक्शन लेबल का उपयोग करके कॉल करता है
यह समाधान है जिसके साथ मैं काम करता हूं। यह आप चाहते हैं कि किसी भी समारोह पर निष्पादन में देरी होगी । यह कुंजी खोज खोज क्वेरी हो सकती है, शायद पिछले या अगले बटन पर त्वरित क्लिक (जो अन्यथा कई अनुरोधों को भेज देगा यदि जल्दी से लगातार क्लिक किया जाता है, और सभी के बाद उपयोग नहीं किया जाता है)। यह एक वैश्विक ऑब्जेक्ट का उपयोग करता है जो प्रत्येक निष्पादन समय को संग्रहीत करता है, और सबसे वर्तमान अनुरोध के साथ इसकी तुलना करता है।
तो परिणाम यह है कि केवल अंतिम क्लिक / कार्रवाई वास्तव में कहा जाएगा, क्योंकि उन अनुरोधों को एक कतार में संग्रहीत किया जाता है, कि एक्स मिलीसेकंड के बाद कॉल किया जाता है यदि कतार में समान लेबल के साथ कोई अन्य अनुरोध मौजूद नहीं है!
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);
}
आप अपना विलंब समय (इसके वैकल्पिक, डिफ़ॉल्ट को 500ms) पर सेट कर सकते हैं। और एक "क्लोजर फैशन" में अपने फ़ंक्शन तर्क भेजें।
उदाहरण के लिए यदि आप बलो फ़ंक्शन को कॉल करना चाहते हैं:
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);});
एक ही फ़ंक्शन को कॉल करने में परिणाम लेकिन उनके लेबल अलग-अलग होने के कारण उन्हें स्वतंत्र रूप से विलंबित करता है