প্রতি 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.calleeএটি বাস্তবে স্ক্রিপ্ট 5-এ অবনমিত রয়েছে।


6
কোডটি কার্যকর করা শেষ হওয়ার আগে পরবর্তী কল করা সম্ভব নয়। টাইমার অ্যাসিঙ্ক্রোনালি গণনা করে কিন্তু কলব্যাকটি সারি করতে হবে। এর অর্থ হ'ল আপনার কলব্যাকটি 60 সেকেন্ডেরও বেশি পরে জ্বলে উঠতে পারে (এবং সম্ভবত)।
অ্যান্ডি ই

14
পার্থক্যটি হ'ল সেটইন্টারওয়াল সাধারণত পূর্ববর্তী পুনরাবৃত্তির সূচনার পরে এক্স মিলিসেকেন্ডগুলি ফাংশনটি চালিত করে, এখানে এপ্রোচটি পূর্ববর্তীটি শেষ হওয়ার
গ্যারেথ

41
অন্যদের জন্য যেমন একটি নোট যেমন এটি খুঁজে পেতে পারে - clearInterval()এটি একটি অংশীদার ফাংশন setInterval()এবং যদি আপনি আপনার পর্যায়ক্রমিক ফাংশন কলটি বন্ধ করতে চান তবে তা কার্যকর হয়।
ক্লে

7
দয়া করে নোট করুন যে সেটইন্টারভাল প্রথমবারের জন্য এমএসের পরে দেরি করে function সুতরাং যদি আপনি অবিলম্বে ফাংশনটি সম্পাদন করতে চান এবং প্রতি বিলম্বের পুনরাবৃত্তি করেন, আপনার উচিত: ফানক (); সেটআইন্টারওয়াল (ফান, বিলম্ব);
মার্কো মার্শালা

5
আমি শুধু এই আর্গুমেন্টস না। ক্যালি জিনিস। আমার কাছে getRates () ফাংশন আছে কিন্তু (ফাংশন () {getRates (); সেটটাইমআউট (getRates (), 10000);}) (); কাজ করছে না: /
darth0s

66

ব্যবহার

setInterval(function, 60000);

সম্পাদনা: (আপনি যদি ঘড়িটি শুরু করার পরে থামাতে চান তবে)

স্ক্রিপ্ট বিভাগ

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

এবং এইচটিএমএল কোড

<!-- 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

ভাল উত্তর. দয়া করে আপনি নতুন তারিখের যে কোনও একটি আপডেট আপডেট করতে পারেন যাতে সেগুলি সামঞ্জস্যপূর্ণ হয়, একটি ব্যবহার করে (নতুন তারিখ) .গেটটাইম () এবং অন্যটি (নতুন তারিখ ()) গেটটাইম ()। উভয়ই যদিও ঠিক কাজ করছে বলে মনে হচ্ছে
এডামসন

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
এটি কীভাবে সমস্যাটি সমাধান করবে সে সম্পর্কে কিছুটা ব্যাখ্যা দুর্দান্ত হবে।
বাহাদেট

-1

কল করার 2 টি উপায় রয়েছে-

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

  2. setInterval(functionName, 60000);

উপরের ফাংশনটি প্রতি 60 সেকেন্ডে কল করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.