2010-07-14 48 views
48

यहां सरल प्रश्न है कि मुझे इसका जवाब नहीं मिल रहा है: एक बार setTimeout सेट हो गया है, क्या यह देखने का कोई तरीका है कि यह अभी भी है, ठीक है, सेट करें?क्या मैं देख सकता हूं कि टाइमर अभी भी चल रहा है या नहीं?

if (!Timer) 
{ 
    Timer = setTimeout(DoThis,60000); 
} 

मैं क्या बता सकते हैं, जब आप clearTimeout, चर अपने पिछले मूल्य पर बनी हुई है। console.log मैंने देखा कि Timer को '12' के रूप में दिखाया गया है, इससे कोई फर्क नहीं पड़ता कि टाइमआउट सेट या साफ़ हो गया है या नहीं। क्या मुझे चर को भी बाहर निकालना है, या बूलियन के रूप में कुछ अन्य चर का उपयोग करना है, हाँ, मैंने इस टाइमर को सेट किया है? निश्चित रूप से यह देखने के लिए एक तरीका है कि टाइमआउट अभी भी चल रहा है या नहीं ... सही? मुझे यह जानने की जरूरत नहीं है कि कितना समय बचा है, बस अगर यह अभी भी चल रहा है।

उत्तर

37

टाइमर के साथ बातचीत करने या इसे रोकने के अलावा किसी भी तरह से बातचीत करने के लिए वैसे भी नहीं है। टाइमर चल रहा है यह इंगित करने के लिए मैं आमतौर पर एक ध्वज का उपयोग करने के बजाय टाइमआउट हैंडलर में टाइमर चर को खींचता हूं। टाइमर कैसे काम करता है इस बारे में W3Schools पर एक अच्छा विवरण है। उनके उदाहरण में वे एक ध्वज चर का उपयोग करते हैं।

जो मूल्य आप देख रहे हैं वह वर्तमान टाइमर पर handle है, जिसका उपयोग तब किया जाता है जब आप इसे साफ़ (रोक) करते हैं।

+8

-1 पैट्रिक, यह सांसारिक सिद्धांत नहीं है। कभी-कभी उन्हें उपयोगी संसाधन मिलते हैं। – JoeRocc

+4

ओटी: समस्या उन लोगों से अलग हो रही है :) विषय के बारे में जानने के बिना, निश्चित रूप से – superjos

+0

"मैं आम तौर पर टाइमआउट में टाइमर चर को कम करता हूं" –

38

मैं क्या है:

var timer = null; 

if (timer != null) { 
    window.clearTimeout(timer); 
    timer = null; 
} 
else { 
    timer = window.setTimeout(yourFunction, 0); 
} 
+1

'सेटटाइमआउट (आपका फ़ंक्शन, 0)' का उपयोग करें, 'सेटटाइमआउट' से सुरक्षित है ('आपका कार्य()', 0) '। – cprcrack

+0

असीमित दुनिया में अच्छी तरह से काम नहीं करता – Epirocks

+1

@Epirocks भी असीमित दुनिया में, जावास्क्रिप्ट अभी भी एकल धागा है। – matpop

4

सेट अन्य चर Timer_Started = true अपने टाइमर के साथ। और यह भी false चर बदलने जब टाइमर समारोह कहा जाता है:

// set 'Timer_Started' when you setTimeout 
var Timer_Started = true; 
var Timer = setTimeout(DoThis,60000); 

function DoThis(){ 

    // function DoThis actions 
    //note that timer is done. 
    Timer_Started = false; 

} 

function Check_If_My_Timer_Is_Done(){ 

    if(Timer_Started){ 
     alert("The timer must still be running."); 
    }else{ 
     alert("The timer is DONE."); 
    } 

} 
1

मैं जानता हूँ कि यह एक necroposting है, लेकिन मैं अभी भी लगता है कि लोग इस बात के लिए देख रहे हैं। 3 चर:

यह मैं क्या उपयोग है

  1. t के बाद से मिलीसेकंड के लिए ..वास्तविक अंतराल
  2. seconds मिलीसेकेंड के लिए सीमा

अगले स्थापित किया गया है के लिए अगला लक्ष्य

  • timerSys के लिए दिनांक वस्तु में मैं एक समारोह के चेक function timer 1 के साथ चर अगर चर सही मायने में है, यदि ऐसा है तो वह जांचता है कि टाइमर पहले से चल रहा है या नहीं और यदि यह वैश्विक वर्र्स भरने की स्थिति है, तो वास्तव में, झूठी, अंतराल को साफ़ करता है औरसेट करता हैसे झूठी;

    function sys() { 
        t = new Date().setMilliseconds(seconds); 
        console.log("Next execution: " + new Date(t)); 
    //this is also the place where you put functions & code needed to happen when interval is triggerd 
    
    } 
    

    और निष्पादित करें::

    timer(5000); 
    

    हर 5 सेकंड कंसोल में

    var t, timerSys, seconds; 
    
    function timer(s) { 
        if (s && typeof s === "number") { 
        if (typeof timerSys === "boolean" || typeof timerSys === "undefined") { 
         timerSys = setInterval(function() { 
         sys(); 
         }, s); 
         t = new Date().setMilliseconds(s); 
         seconds = s; 
        } 
        } else { 
        clearInterval(timerSys); 
        timerSys = false; 
        } 
        return ((!timerSys) ? "0" : t) 
    } 
    
    function sys() { 
        t = new Date().setMilliseconds(seconds); 
    
    } 
    

    उदाहरण मैं

    अब आप sys समारोह के लिए एक लाइन जोड़ सकते हैं:

    //output:: Next execution: Sun May 08 2016 11:01:05 GMT+0200 (Romance (zomertijd)) 
    

    उदाहरण II

    function sys() { 
        t = new Date().setMilliseconds(seconds); 
        console.log("Next execution: " + seconds/1000 + " seconds"); 
    
    } 
    
    $(function() { 
        timer(5000); 
    }); 
    

    कंसोल में हर 5 सेकंड:

     //output:: Next execution: 5 seconds 
    

    उदाहरण तृतीय

    var t, timerSys, seconds; 
     
    
     
    function timer(s) { 
     
        if (s && typeof s === "number") { 
     
        if (typeof timerSys === "boolean" || typeof timerSys === "undefined") { 
     
         timerSys = setInterval(function() { 
     
         sys(); 
     
         }, s); 
     
         t = new Date().setMilliseconds(s); 
     
         seconds = s; 
     
        } 
     
        } else { 
     
        clearInterval(timerSys); 
     
        timerSys = false; 
     
        } 
     
        return ((!timerSys) ? "0" : t) 
     
    } 
     
    
     
    function sys() { 
     
        t = new Date().setMilliseconds(seconds); 
     
        console.log("Next execution: " + seconds/1000 + " seconds"); 
     
    
     
    } 
     
    
     
    $(function() { 
     
        timer(5000); 
     
    
     
        $("button").on("click", function() { 
     
        $("span").text(t - new Date()); 
     
        }) 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <button>Freebeer</button> 
     
    <span></span>
    एक टाइमर शुरू करने से पहले

    var alarm = setTimeout(wakeUpOneHourLater, 3600000); 
    function wakeUpOneHourLater() { 
        alarm = null; //stop alarm after sleeping for exactly one hour 
    } 
    //... 
    if (!alarm) { 
        console.log('Oops, waked up too early...Zzz...'); 
    } 
    else { 
        console.log('Slept for at least one hour!'); 
    } 
    
  • 1

    जा सकते हैं मैं आमतौर पर टाइमर रद्द ।

    var timer; 
    var startTimer = function() { 
        clearTimout(timer); 
        timer = setTimeout(DoThis, 6000); 
    } 
    

    यह एक नया उदाहरण शुरू करने से पहले किसी भी टाइमर को साफ़ करेगा।

    1

    मौजूदा टाइमर के लिए जाँच करने के लिए कोई ज़रूरत नहीं, बस clearTimout:

    नोट इस तरह से आप नीचे दिए गए 0

    संबंधित मुद्दे

     संबंधित मुद्दे