मैं स्क्रैच से मध्यवर्ती कार्यों को लागू करके जावास्क्रिप्ट के साथ पकड़ने की कोशिश कर रहा हूं। वर्तमान में एक विलंब फ़ंक्शन को लागू करने का प्रयास कर रहा है जो एक प्रतीक्षा समय (प्रतीक्षा) के बाद तर्क के रूप में पारित एक मनमाना कार्य निष्पादित करता है। फ़ंक्शन में देरी के लिए अतिरिक्त तर्कों के रूप में इसे अतिरिक्त रूप से पारित तर्कों को अग्रेषित करने में सक्षम होना चाहिए।

मैंने अब तक जो बनाया है वह सेटटाइमआउट() के भीतर फ़ंक्शन को कॉल नहीं कर रहा है। मुझे यकीन नहीं है कि यह एक वाक्यविन्यास त्रुटि है या ive अभी पूरी तरह से बिंदु से चूक गया है। मैंने यहां पर इसी तरह के प्रश्नों को देखा है और कुछ सुझाए गए परिणामों को लागू करने का प्रयास किया है, हालांकि कोई भी अतिरिक्त तर्क पहलू को ध्यान में नहीं रखता है। वैसे भी, यहाँ मेरे पास वर्तमान में है।

    var exampleDelay = function (func, wait) {
      return function () {
        setTimeout(func.apply(this, arguments), wait);
      }
    };

इससे निपटने में किसी भी मदद की सराहना की जाएगी (या यदि कोई मुझे किसी ऐसे उत्तर की ओर इशारा कर सकता है जो मुझे याद हो सकता है)।

4
Charlie Boyce 8 सितंबर 2017, 13:14
exampleDelay एक फ़ंक्शन है, आपको टाइमआउट निष्पादित होने से पहले इसे कॉल करना होगा।
 – 
Teemu
8 सितंबर 2017, 13:18
क्या आप जानते हैं कि सेटटाइमआउट दो से अधिक तर्कों को स्वीकार करता है? क्या इससे मदद मिलेगी?
 – 
Jaromanda X
8 सितंबर 2017, 13:18
1
func.apply(this, arguments) तुरंत func को कॉल करता है - शायद आपका मतलब setTimeout(func.bind(this), wait, ...arguments); से था
 – 
Jaromanda X
8 सितंबर 2017, 13:19
मैं exampleDelay को बाद में एक परीक्षण परिदृश्य में एक साधारण फ़ंक्शन के साथ लाइन पर कॉल करता हूं जो हर बार काउंटर में जोड़ता है (बस यह देखने के लिए कि यह काम करता है)।
 – 
Charlie Boyce
8 सितंबर 2017, 13:20
सुनिश्चित नहीं है कि आप क्या करने की कोशिश कर रहे हैं। var exampleDelay = window.setTimeout;?
 – 
Bergi
8 सितंबर 2017, 13:20

2 जवाब

फ्रैंक ने मुझे इसके लिए हराया लेकिन सिर्फ विविधता के लिए। यदि आप एक बार में सभी पैरा की आपूर्ति करना चाहते हैं तो यह एक विकल्प हो सकता है

   var exampleDelay = function(callback,wait,args) {
   
var args = [].slice.call(arguments) // get the parent arguments and convert to an array
args.splice(0,2); // remove the first two argument which are the fuction supplied and the wait time

// a fuction to call the supplied function
    var callnow =  function() {  
    var params = arguments; // get the child arguments 
    var context = this;
    
    setTimeout(function(){
      callback.apply(context, params) // call the function 
    }, wait);
  }
     
     callnow.apply( this, args ) // use apply to supply the arguments extracted from the parrent
   };


   exampleDelay(console.log, 1000,"hey")

   exampleDelay(console.log, 5,"hey", "there")
 callnow.apply( this, args ) // we then call the function with apply and supply args extracted from the parent 

ठीक है, आप यह सुनिश्चित करने के लिए बाद में फ़ंक्शन सत्यापन को संभाल सकते हैं कि पहला तर्क एक फ़ंक्शन है

1
ayinloya 8 सितंबर 2017, 15:18

आप जिस फ़ंक्शन को exampleDelay से लौटाते हैं, वह वह है जिसे आप बाद में कॉल करते हैं। उस फ़ंक्शन को कॉल करने के समय arguments को संरक्षित करने के लिए जब तक टाइमर इसे निष्पादित नहीं करता है, आप टाइमर के भीतर एक अज्ञात फ़ंक्शन में इच्छित फ़ंक्शन को लपेट सकते हैं। फिर अंदर आप पहले से संग्रहीत तर्कों को पारित करने के लिए apply का उपयोग कर सकते हैं। नीचे के समान।

var exampleDelay = function(func, wait) {
  return function() {  
    var params = arguments;
    var context = this;
    
    setTimeout(function(){
      func.apply(context, params)
    }, wait);
  }
};

var func1 = function(a, b) {
  console.log(a + b);
}

var func2 = function(a, b, c) {
  console.log(a, b, c);
}

var x = exampleDelay(func1, 1000);
var y = exampleDelay(func2, 2000);

x(12, 15);
y('How', 'Are', 'You?');
0
Nope 8 सितंबर 2017, 14:02