ClearInterval () को setInterval () के अंदर कहा जा सकता है?


124
bigloop=setInterval(function () {
              var checked = $('#status_table tr [id^="monitor_"]:checked');
                if (checked.index()===-1 ||checked.length===0 || ){
                    bigloop=clearInterval(bigloop);
                    $('#monitor').button('enable');
                }else{

                        (function loop(i) {                           
                            //monitor element at index i
                            monitoring($(checked[i]).parents('tr'));
                            //delay of 3 seconds
                            setTimeout(function () {
                                //when incremented i is less than the number of rows, call loop for next index
                                if (++i < checked.length) loop(i);
                            }, 3000);
                        }(0)); //start with 0
                }                            
            }, index*3000); //loop period

मेरे पास ऊपर कोड है और कभी-कभी यह काम कर रहा है, कभी-कभी यह नहीं होता है। मैं सोच रहा हूँ कि अगर clearInterval वास्तव में टाइमर साफ़ करता है ?? क्योंकि यह monitorबटन है जो केवल निष्क्रिय हो जाएगा जब यह monitoringफ़ंक्शन में होगा। मेरे पास एक और हैclearIntervalजब एक तत्व .outputRemoveपर क्लिक किया जाता है होता है। नीचे दिए गए कोड को देखें:

//remove row entry in the table      
        $('#status_table').on('click', '.outputRemove', function () {
            deleted= true;
            bigloop= window.clearInterval(bigloop);
            var thistr=$(this).closest('tr');
            thistr.remove();
            $('#monitor').button('enable');

            $('#status_table tbody tr').find('td:first').text(function(index){
               return ++index;

            });
        });

लेकिन इसे फिर से अक्षम करने से पहले इसे थोड़ी देर के लिए सक्षम किया गया था। विल clearIntervalसे कार्यक्रम बाहर निकलने के setIntervalसमारोह?


शायद समस्या loopnameदूसरे स्निपेट में है? वो क्या है?
bfavaretto

opps टाइपो। मेरे पास एक फ़ंक्शन था clearloop(loopname)जिसमें clearIntervalइसे सरल बनाने के लिए था, लेकिन मैंने इसे ऊपर दिए गए कोड में सीधे बदल दिया।
yvonnezoe

जवाबों:


212

हाँ तुम कर सकते हो। आप इसका परीक्षण भी कर सकते हैं:

var i = 0;
var timer = setInterval(function() {
  console.log(++i);
  if (i === 5) clearInterval(timer);
  console.log('post-interval'); //this will still run after clearing
}, 200);

इस उदाहरण में, यह टाइमर i5 तक पहुंचने पर साफ़ हो जाता है।


4
समझा। यह हमेशा एक स्थानीय चर होना चाहिए? मेरे मामले में, मैं इसे वैश्विक के रूप में सेट करता हूं क्योंकि मेरे पास बाहरी फ़ंक्शन है जो क्लियरइंटरवल को कॉल करेगा ... और इसके अलावा, मेरे पास 2
सेटइंटरवल है

मैं यहाँ एक सवाल है, clearIntervalअगर यह setIntervalकहीं और बंद कर दिया है / बिल्कुल शुरू नहीं होगा बिंदु पर अटक जाएगा ?
yvonnezoe

@yvonnezoe ने उत्तर को अपडेट किया, और यह नहीं है। फ़ंक्शन जो प्रति अंतराल चलता है, वह फिर से पूरा होने से पहले ही खत्म हो जाता है। हालाँकि, आपके प्रश्न के मामले में, आपको कई टाइमर मिले हैं। मेरा सुझाव है कि आप अपने दृष्टिकोण पर पुनर्विचार करें।
जोसेफ

ठीक है, स्पष्ट करने के लिए धन्यवाद! :) तो यह मेरे कार्यक्रम में कुछ तर्क त्रुटियों होना चाहिए।
yvonnezoe

1
तथ्य यह है कि यह दृष्टिकोण मेरे दिमाग को काम करता है। हम चर की परिभाषा में एक चर को संदर्भित कर रहे हैं। यह कैसे काम करता है अगर हम अभी भी परिभाषित कर रहे हैं कि 'टाइमर' क्या है और फिर इसे स्पष्ट करने के लिए एक तर्क के रूप में कह रहे हैं?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.