सेटइंटरवाल और क्लियरइंटरवल का उपयोग कैसे करें?


138
function doKeyDown(event) {
    switch (event.keyCode) {
    case 32:
        /* Space bar was pressed */
        if (x == 4) {
            setInterval(drawAll, 20);
        }
        else {
            setInterval(drawAll, 20);
            x += dx;
        }
        break;
    }
}

नमस्ते,

मैं drawAll()एक बार लूप नहीं बनाने के लिए कॉल करना चाहता हूं जो बार-बार कॉल करता है drawAll, क्या मुझे उसके लिए पुनरावर्ती विधि का उपयोग करना चाहिए या क्या मुझे उपयोग करना चाहिए clearInterval?

कृपया मुझे भी बताएं उपयोग करने के लिए clearInterval? धन्यवाद :)

जवाबों:


210

setIntervalआवर्ती टाइमर सेट करता है । यह एक ऐसा हैंडल देता है जिसे आप clearIntervalफायरिंग से रोकने के लिए पास कर सकते हैं :

var handle = setInterval(drawAll, 20);

// When you want to cancel it:
clearInterval(handle);
handle = 0; // I just do this so I know I've cleared the interval

ब्राउज़रों पर, हैंडल को एक संख्या होने की गारंटी दी जाती है जो इसके बराबर नहीं है 0; इसलिए, 0"कोई टाइमर सेट" के लिए एक उपयोगी ध्वज मूल्य बनाता है। (अन्य प्लेटफ़ॉर्म अन्य मान लौटा सकते हैं; उदाहरण के लिए, नोडजेएस के टाइमर फ़ंक्शन एक वस्तु लौटाते हैं।)

किसी फ़ंक्शन को केवल एक बार आग लगाने के लिए, setTimeoutइसके बजाय उपयोग करें । यह फायरिंग नहीं करेगा। (यह एक ऐसा हैंडल भी देता है जिसका उपयोग आप इसे रद्द करने के लिए उपयोग कर सकते हैं clearTimeoutइससे पहले कि यह उचित हो, एक बार आग लग जाए।)

setTimeout(drawAll, 20);

29

ClearInterval एक विकल्प है:

var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec 
function doStuff() {
  alert('this is a 2 second warning');
  clearInterval(interval);
}

7
साथ तार का उपयोग कभी नहीं setIntervalया setTimeout
टीजे क्राउडर

1
आपका मतलब है कि मुझे doStuff () के आसपास के कोट्स को हटा देना चाहिए?
जोशुआ - पेन्डो

9
हाँ, दोनों उद्धरण और parens। सीधे शब्दों में: setInterval(doStuff);। एक स्ट्रिंग को पास setIntervalकरना एक अंतर्निहित कॉल है eval। इसके बजाय फ़ंक्शन संदर्भ में पास करने के लिए सबसे अच्छा है ।
टीजे क्राउडर

1
आह ठीक है, नीचे शायद उचित है .. मैंने एक उदाहरण दिखाया, जो सही नहीं है (हालांकि यह मेरे मामलों में काम करता है, लेकिन मैं जैसे-जैसे बोलता हूं, मैं इन्हें बदल रहा हूं)। थम्स अप! :)
यहोशू -

10

setTimeout(drawAll, 20)इसके बजाय उपयोग करें । यह केवल एक बार फ़ंक्शन निष्पादित करता है।


बहुत बहुत धन्यवाद, लेकिन सेटटाइमआउट प्रत्येक बिंदु पर लूप खत्म कर रहा है, मैं अन्य दृष्टिकोण और इसके ठीक काम का उपयोग करता हूं, फ़ंक्शन doKeyDown (घटना) {स्विच (event.keyCode) {मामला 32: / * स्पेस बार दबाया गया था * पाश / सेटइंटरवल (ड्राआल, 20); if (x == 202) {x = 400; स्पिनर (); } टूटना; }}
राज

यह सवाल नहीं था
नीनो Markopac

8

मैंने इलेक्ट्रॉन के साथ कोणीय का उपयोग किया,

मेरे मामले में, setIntervalNodejs टाइमर ऑब्जेक्ट लौटाता है। जब मैंने कहा clearInterval(timerobject)कि यह काम नहीं किया।

मुझे पहले आईडी प्राप्त करना था और क्लियरइंटरवल में कॉल करना था

clearInterval(timerobject._id)

मैंने इसके साथ कई घंटे संघर्ष किया है। उम्मीद है की यह मदद करेगा।


5

साइड नोट - यदि आप अंतराल को निर्धारित और स्पष्ट करने के लिए अलग-अलग फ़ंक्शन का उपयोग करना चाहते हैं, तो अंतराल चर को उन सभी के लिए, 'सापेक्ष वैश्विक', या 'एक स्तर ऊपर' दायरे में पहुंचना होगा:

var interval = null;    

function startStuff(func, time) {
    interval = setInterval(func, time);
}

function stopStuff() {
    clearInterval(interval);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.