खोज…
वाक्य - विन्यास
- timeoutID = setTimeout (फ़ंक्शन () {}, मिलीसेकंड)
- intervalID = setInterval (फ़ंक्शन () {}, मिलीसेकंड)
- timeoutID = setTimeout (फ़ंक्शन () {}, मिलीसेकंड, पैरामीटर, पैरामीटर, ...)
- intervalID = setInterval (फ़ंक्शन () {}, मिलीसेकंड, पैरामीटर, पैरामीटर, ...)
- clearTimeout (timeoutID)
- clearInterval (intervalID)
टिप्पणियों
यदि देरी निर्दिष्ट नहीं है, तो यह 0 मिलीसेकंड तक डिफॉल्ट करता है। हालाँकि, वास्तविक देरी इससे अधिक लंबी होगी ; उदाहरण के लिए, HTML5 कल्पना 4 मिलीसेकंड की न्यूनतम देरी को निर्दिष्ट करती है।
यहां तक कि जब setTimeout
शून्य की देरी के साथ कहा जाता है, तो setTimeout
द्वारा कहा जाने वाला फ़ंक्शन असिंक्रोनस रूप से निष्पादित किया जाएगा।
ध्यान दें कि यदि आपने ऑपरेशन किया है और अगले कोड वाक्य पर चले गए हैं, तो भी डोम हेरफेर जैसे कई ऑपरेशन आवश्यक रूप से पूरे नहीं होते हैं, इसलिए आपको यह नहीं मान लेना चाहिए कि वे समकालिक रूप से चलेंगे।
का उपयोग करते हुए setTimeout(someFunc, 0)
के निष्पादन enqueues someFunc
, वर्तमान जावास्क्रिप्ट इंजन के कॉल स्टैक के अंत में समारोह इतना समारोह उन कार्यों को पूरा कर के बाद बुलाया जाएगा।
फ़ंक्शन ( setTimeout(function(){some..code}, 1000)
स्थान पर जावास्क्रिप्ट कोड ( setTimeout("some..code", 1000)
) युक्त स्ट्रिंग को पास करना संभव है। यदि कोड एक स्ट्रिंग में रखा गया है, तो इसे बाद में eval()
का उपयोग करके पार्स किया जाएगा। स्ट्रिंग-स्टाइल टाइमआउट को प्रदर्शन, स्पष्टता और कभी-कभी सुरक्षा कारणों के लिए अनुशंसित नहीं किया जाता है, लेकिन आप पुराने कोड देख सकते हैं जो इस शैली का उपयोग करता है। नेटस्केप नेविगेटर 4.0 और इंटरनेट एक्सप्लोरर 5.0 के बाद से पासिंग फ़ंक्शन का समर्थन किया गया है।
अंतराल
function waitFunc(){
console.log("This will be logged every 5 seconds");
}
window.setInterval(waitFunc,5000);
अंतराल को दूर करना
window.setInterval()
एक IntervalID
देता है, जिसका उपयोग उस अंतराल को लगातार चलने से रोकने के लिए किया जा सकता है। ऐसा करने के लिए, एक चर में window.setInterval()
के रिटर्न मान को संग्रहीत करें और केवल तर्क के रूप में उस चर के साथ clearInterval()
कॉल करें:
function waitFunc(){
console.log("This will be logged every 5 seconds");
}
var interval = window.setInterval(waitFunc,5000);
window.setTimeout(function(){
clearInterval(interval);
},32000);
यह लॉग करेगा This will be logged every 5 seconds
हर 5 सेकंड में This will be logged every 5 seconds
किया जाएगा, लेकिन 32 सेकंड के बाद इसे रोक देगा। तो यह मैसेज को 6 बार लॉग करेगा।
टाइमआउट निकाल रहे हैं
window.setTimout()
एक TimeoutID
लौटाता है, जिसका उपयोग उस टाइमआउट को चलने से रोकने के लिए किया जा सकता है। ऐसा करने के लिए, एक चर में window.setTimeout()
के रिटर्न मान को संग्रहीत करें और केवल तर्क के रूप में उस चर के साथ clearTimeout()
कॉल करें:
function waitFunc(){
console.log("This will not be logged after 5 seconds");
}
function stopFunc(){
clearTimeout(timeout);
}
var timeout = window.setTimeout(waitFunc,5000);
window.setTimeout(stopFunc,3000);
यह संदेश लॉग नहीं करेगा क्योंकि टाइमर 3 सेकंड के बाद बंद हो जाता है।
पुनरावर्ती सेटटाइमआउट
अनिश्चित काल तक किसी फ़ंक्शन को दोहराने के लिए, setTimeout
को पुनरावर्ती कहा जा सकता है:
function repeatingFunc() {
console.log("It's been 5 seconds. Execute the function again.");
setTimeout(repeatingFunc, 5000);
}
setTimeout(repeatingFunc, 5000);
setInterval
विपरीत, यह सुनिश्चित करता है कि फ़ंक्शन निष्पादित करेगा भले ही फ़ंक्शन का चलने का समय निर्दिष्ट देरी से अधिक हो। हालांकि, यह फ़ंक्शन निष्पादन के बीच एक नियमित अंतराल की गारंटी नहीं देता है। यह व्यवहार इसलिए भी भिन्न होता है क्योंकि पुनरावर्ती कॉल से पहले setTimeout
लिए एक अपवाद इसे फिर से दोहराने से रोक देगा, जबकि setInterval
अपवादों की परवाह किए बिना अनिश्चित रूप से दोहराएगा।
सेटटाइमआउट, संचालन का क्रम, क्लियर टाइमआउट
setTimeout
- एक फ़ंक्शन को निष्पादित करता है, निर्दिष्ट संख्या में मिलीसेकंड प्रतीक्षा करने के बाद।
- एक फ़ंक्शन के निष्पादन में देरी करने के लिए उपयोग किया जाता है।
सिंटैक्स: setTimeout(function, milliseconds)
या window.setTimeout(function, milliseconds)
उदाहरण: यह उदाहरण 1 सेकंड के बाद कंसोल को "हैलो" आउटपुट करता है। दूसरा पैरामीटर मिलीसेकंड में है, इसलिए 1000 = 1 सेकंड, 250 = 0.25 सेकंड, आदि।
setTimeout(function() {
console.log('hello');
}, 1000);
सेटटाइमआउट की समस्याएं
यदि आप लूप में setTimeout
विधि का उपयोग कर रहे हैं :
for (i = 0; i < 3; ++i) {
setTimeout(function(){
console.log(i);
}, 500);
}
यह मान 3 three
बार आउटपुट करेगा, जो सही नहीं है।
इस समस्या का समाधान:
for (i = 0; i < 3; ++i) {
setTimeout(function(j){
console.log(i);
}(i), 1000);
}
यह 0
, 1
, 2
आउटपुट देगा। यहाँ, हम एक पैरामीटर ( j
) के रूप में i
को फंक्शन में पास कर रहे हैं।
कार्रवाई के आदेश
इसके अतिरिक्त, हालांकि, इस तथ्य के कारण कि जावास्क्रिप्ट एकल थ्रेडेड है और एक वैश्विक ईवेंट लूप का उपयोग करता है, setTimeout
का उपयोग शून्य देरी के साथ setTimeout
कॉल करके निष्पादन कतार के अंत में एक आइटम जोड़ने के लिए किया जा सकता है। उदाहरण के लिए:
setTimeout(function() {
console.log('world');
}, 0);
console.log('hello');
वास्तव में उत्पादन होगा:
hello
world
इसके अलावा, यहां शून्य मिलीसेकंड का मतलब यह नहीं है कि सेटटाइमआउट के अंदर फ़ंक्शन तुरंत निष्पादित होगा। निष्पादन की कतार में शेष वस्तुओं को निष्पादित करने के आधार पर यह थोड़ा अधिक होगा। यह एक कतार के अंत में धकेल दिया जाता है।
एक समय समाप्ति रद्द कर रहा है
ClearTimeout (): सेटटाइमआउट में निर्दिष्ट फ़ंक्शन का निष्पादन रोक देता है setTimeout()
सिंटैक्स: क्लियर टाइमआउट (टाइमआउट वेरिएबल) या विंडो.क्लेयर टाइमआउट (टाइमआउट वेरिएबल)
उदाहरण :
var timeout = setTimeout(function() {
console.log('hello');
}, 1000);
clearTimeout(timeout); // The timeout will no longer be executed
अंतराल
मानक
आपको वैरिएबल बनाने की आवश्यकता नहीं है, लेकिन यह एक अच्छा अभ्यास है क्योंकि आप वर्तमान में चल रहे अंतराल को रोकने के लिए क्लीयरइंटरवल के साथ उस वैरिएबल का उपयोग कर सकते हैं।
var int = setInterval("doSomething()", 5000 ); /* 5 seconds */
var int = setInterval(doSomething, 5000 ); /* same thing, no quotes, no parens */
यदि आपको doSomething फ़ंक्शन में पैरामीटर पास करने की आवश्यकता है, तो आप उन्हें पहले दो से परे अतिरिक्त मापदंडों के रूप में सेट कर सकते हैं।
ओवरलैपिंग के बिना
setInterval, ऊपर के रूप में, हर 5 सेकंड (या जो कुछ भी आप इसे सेट करते हैं) को चलाएगा चाहे कोई भी हो। भले ही फ़ंक्शन doSomething को चलने में 5 सेकंड से अधिक समय लगता है। वह मुद्दे पैदा कर सकता है। यदि आप बस सुनिश्चित करना चाहते हैं कि doSomething की रनिंग के बीच में ठहराव है, तो आप यह कर सकते हैं:
(function(){
doSomething();
setTimeout(arguments.callee, 5000);
})()