हर 60 सेकंड में एक फ़ंक्शन कॉल करना


244

setTimeout()एक निश्चित समय पर एक फ़ंक्शन लॉन्च करना संभव है:

setTimeout(function, 60000);

लेकिन क्या होगा अगर मैं कई बार फ़ंक्शन लॉन्च करना चाहूंगा? जब भी कोई समय अंतराल बीतता है, तो मैं फ़ंक्शन को निष्पादित करना चाहता हूं (प्रत्येक 60 सेकंड, चलो कहते हैं)।

जवाबों:


373

यदि आपको परवाह नहीं है कि timerआपके अंतराल से अधिक समय तक कोड का उपयोग हो सकता है setInterval():

setInterval(function, delay)

यह फंक्शन फंक्शन को पहले पैरामीटर के रूप में बार-बार पार करता है।

एक फ़ंक्शन setTimeoutके साथ उपयोग करने के लिए एक बेहतर तरीका है self-executing anonymous:

(function(){
    // do some stuff
    setTimeout(arguments.callee, 60000);
})();

वह गारंटी, कि आपके कोड को निष्पादित करने से पहले अगली कॉल नहीं की गई है। मैंने arguments.calleeइस उदाहरण में फ़ंक्शन संदर्भ के रूप में उपयोग किया । यह फ़ंक्शन को एक नाम देने और कॉल करने का एक बेहतर तरीका है, setTimeoutक्योंकि भीतर arguments.callee5 एक्मास्मैट में पदावनत किया गया है।


6
कोड खत्म होने से पहले यह अगली कॉल के लिए संभव नहीं है। टाइमर एसिंक्रोनस रूप से नीचे गिना जाता है लेकिन कॉलबैक को कतारबद्ध करना पड़ता है। इसका मतलब है कि 60 से अधिक सेकंड के बाद आपके कॉलबैक में आग लग सकती है (और शायद)।
एंडी ई

14
अंतर यह है कि आम तौर पर setInterval के बाद समारोह एक्स मिलीसेकेंड चलेंगे है शुरू , पिछले यात्रा की जबकि दृष्टिकोण यहाँ अगले चरण एक्स मिलीसेकेंड के बाद पिछले एक चलेंगे समाप्त हो गया
गैरेथ

41
बस दूसरों के लिए एक नोट के रूप में, जो इसे पा सकते हैं - clearInterval()एक भागीदार कार्य है setInterval()और यदि आप अपने आवधिक फ़ंक्शन कॉल को बंद करना चाहते हैं तो काम आता है।
क्ले

7
कृपया ध्यान दें कि setInterval विलंब के बाद पहली बार फ़ंक्शन निष्पादित करता है। इसलिए यदि आप फंक्शन को तुरंत निष्पादित करना चाहते हैं, और हर देरी को दोहराते हैं, तो आपको ऐसा करना चाहिए: func (); सेटइंटरवल (दुर्गंध, देरी);
मार्को मंगला

5
मुझे यह तर्क नहीं मिलता। मेरे पास getRates () फ़ंक्शन है लेकिन (फ़ंक्शन () {getRates (); सेटटाइमआउट (getRates (), 10000);}) (); काम नहीं कर रहा है: /
darth0s

66

उपयोग

setInterval(function, 60000);

संपादित करें: (यदि आप इसे चालू करने के बाद घड़ी को रोकना चाहते हैं तो)

स्क्रिप्ट अनुभाग

<script>
var int=self.setInterval(function, 60000);
</script>

और HTML कोड

<!-- Stop Button -->
<a href="#" onclick="window.clearInterval(int);return false;">Stop</a>

1
उस मामले में, आप इसे दोहराने से रोकने के बाद इसे कैसे दोहराएंगे?
एंडरसन ग्रीन

26

का एक बेहतर इस्तेमाल JANDY के जवाब एक मतदान समारोह को लागू करने कि चुनाव हर intervalसेकंड, और के बाद समाप्त होता है timeoutसेकंड।

function pollFunc(fn, timeout, interval) {
    var startTime = (new Date()).getTime();
    interval = interval || 1000;

    (function p() {
        fn();
        if (((new Date).getTime() - startTime ) <= timeout)  {
            setTimeout(p, interval);
        }
    })();
}

pollFunc(sendHeartBeat, 60000, 1000);

अपडेट करें

टिप्पणी के अनुसार, मतदान को रोकने के लिए पारित समारोह की क्षमता के लिए इसे अद्यतन करना:

function pollFunc(fn, timeout, interval) {
    var startTime = (new Date()).getTime();
    interval = interval || 1000,
    canPoll = true;

    (function p() {
        canPoll = ((new Date).getTime() - startTime ) <= timeout;
        if (!fn() && canPoll)  { // ensures the function exucutes
            setTimeout(p, interval);
        }
    })();
}

pollFunc(sendHeartBeat, 60000, 1000);

function sendHeartBeat(params) {
    ...
    ...
    if (receivedData) {
        // no need to execute further
        return true; // or false, change the IIFE inside condition accordingly.
    }
}

आप मतदान को भीतर से कैसे रोकेंगे sendHeartBeat?
तैमूरी

1
यह अच्छा उदाहरण है! जब आप इकाई परीक्षणों को लिखने के लिए कठिन समय का उपयोग करते हैं, लेकिन इस दृष्टिकोण के साथ - यह आसान है
Dmytro Medvid

अच्छा उत्तर। क्या आप नई तिथि के उपयोग में से एक को अपडेट कर सकते हैं ताकि वे सुसंगत हों, एक उपयोग (नई तिथि) .getTime () और दूसरा (नई तिथि) (। GetTime) ()। हालांकि दोनों ठीक काम करते दिख रहे हैं
मार्क एडम्सन

intervalऔर timeoutमिलीसेकंड में हैं, वे नहीं हैं?
पेट्रीजियो बीकरल

18

JQuery में आप इस तरह कर सकते हैं।

function random_no(){
     var ran=Math.random();
     jQuery('#random_no_container').html(ran);
}
           
window.setInterval(function(){
       /// call your function here
      random_no();
}, 6000);  // Change Interval here to test. For eg: 5000 for 5 sec
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="random_no_container">
      Hello. Here you can see random numbers after every 6 sec
</div>


संख्या हर 12 सेकंड में कम या ज्यादा नवीनीकृत होती है - क्या यह एक मिनट नहीं होना चाहिए?
अधिकतम

1
टिप्पणी देखें // Change Interval here to test. For eg: 5000 for 5 secवर्तमान में यह हर 6 सेकंड में बदलने के लिए सेट है। एक मिनट के लिए मूल्य 60000 का उपयोग करें
इष्टतम क्रिएटिव


7

आप बस फ़ंक्शन के अंत में सेटटाइमआउट कह सकते हैं। यह घटना कतार में फिर से जोड़ देगा। आप देरी के मूल्यों को अलग करने के लिए किसी भी प्रकार के तर्क का उपयोग कर सकते हैं। उदाहरण के लिए,

function multiStep() {
  // do some work here
  blah_blah_whatever();
  var newtime = 60000;
  if (!requestStop) {
    setTimeout(multiStep, newtime);
  }
}


3

एक जावास्क्रिप्ट फ़ंक्शन को हर 2 सेकंड में 10 सेकंड के लिए लगातार कॉल करें।

var intervalPromise;
$scope.startTimer = function(fn, delay, timeoutTime) {
    intervalPromise = $interval(function() {
        fn();
        var currentTime = new Date().getTime() - $scope.startTime;
        if (currentTime > timeoutTime){
            $interval.cancel(intervalPromise);
          }                  
    }, delay);
};

$scope.startTimer(hello, 2000, 10000);

hello(){
  console.log("hello");
}


1
// example:
// checkEach(1000, () => {
//   if(!canIDoWorkNow()) {
//     return true // try again after 1 second
//   }
//
//   doWork()
// })
export function checkEach(milliseconds, fn) {
  const timer = setInterval(
    () => {
      try {
        const retry = fn()

        if (retry !== true) {
          clearInterval(timer)
        }
      } catch (e) {
        clearInterval(timer)

        throw e
      }
    },
    milliseconds
  )
}

1

function random(number) {
  return Math.floor(Math.random() * (number+1));
}
setInterval(() => {
    const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';//rgb value (0-255,0-255,0-255)
    document.body.style.backgroundColor = rndCol;   
}, 1000);
<script src="test.js"></script>
it changes background color in every 1 second (written as 1000 in JS)


0

यहाँ हम नैचुरल नंबर 0 से ...... एन (कंसोल में हर 60 सेकंड में अगला नंबर प्रिंट करते हैं।), सेटइंटरवल () का उपयोग करते हुए।

var count = 0;
function abc(){
    count ++;
    console.log(count);
}
setInterval(abc,60*1000);

1
यह कैसे हल करती है, इस बारे में थोड़ा स्पष्टीकरण बहुत अच्छा होगा।
vahdet

-1

कॉल करने के 2 तरीके हैं-

  1. setInterval(function (){ functionName();}, 60000);

  2. setInterval(functionName, 60000);

उपरोक्त फ़ंक्शन प्रत्येक 60 सेकंड पर कॉल करेगा।

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