জাভাস্ক্রিপ্টে পর্যায়ক্রমে কোনও ফাংশন কল করার কোনও উপায় আছে কি?


128

জাভাস্ক্রিপ্টে পর্যায়ক্রমে কোনও ফাংশন কল করার কোনও উপায় আছে কি?

উত্তর:


214

আপনি চান setInterval():

var intervalID = setInterval(function(){alert("Interval reached");}, 5000);

সেটইন্টারওয়াল () -এর প্রথম পরামিতিও মূল্যায়নের জন্য কোডের একটি স্ট্রিং হতে পারে।

আপনি এর মাধ্যমে একটি পর্যায়ক্রমিক ফাংশন সাফ করতে পারেন:

clearInterval(intervalID);

15
আমি উঁচু হয়েছি এবং তারপরে আমার আপভোটটি (তবে ডাউনভোট নয়) পুনরুদ্ধার করার সিদ্ধান্ত নিয়েছি কারণ আপনি সেট ইনটারভালটিতে স্ট্রিং আর্গুমেন্ট ব্যবহার করছেন। কার্যকারিতা দক্ষতা, সুরক্ষা এবং বন্ধ করার বৈশিষ্ট্যগুলির জন্য স্ট্রিং আর্গুমেন্টের পক্ষে প্রায়শই ব্যবহার করা উচিত।
জেসন এস

5
ঠিক আছে, আমার আপত্তি নেই। setInterval()প্যারামিটার বিবেচনা না করেই প্রশ্নের সঠিক উত্তর। এটি কেবল একটি উদাহরণ এবং উভয় পদ্ধতিই সংজ্ঞা অনুসারে সঠিক।
জুমব্যাট

2
আমি জেসন এস এর সাথে একমত; এটি সত্যিই একটি ফাংশন হওয়া উচিত। আপনার উদাহরণস্বরূপ, একমাত্র সমস্যা হ'ল নগণ্য পারফরম্যান্স ক্ষতি, তবে এটি প্রবেশ করা একটি খারাপ অভ্যাস।
ম্যাথু ক্রামলে

4
আমি আপনার উভয়ের সাথে একমত, একটি ফাংশন ব্যবহার করা আরও ভাল। আমি কখনও বলিনি যে এটি ছিল না। এটি যে কোনও উপায়েই সঠিক, তবে মন্তব্যের জন্য, আমি পরিবর্তে কোনও ফাংশন রাখার জন্য উত্তরটি সম্পাদনা করব।
জুমব্যাট

37

দয়া করে মনে রাখবেন setInterval () প্রায়ই পর্যাবৃত্ত সঞ্চালনের জন্য সবচেয়ে ভালো সমাধান নয় - এটি সত্যিই কি জাভাস্ক্রিপ্ট আপনি আসলে পর্যায়ক্রমে আহ্বান করছি উপর নির্ভর করে।

যেমন। আপনি যদি 1000 মিমি অবধি এবং নির্দিষ্ট পর্যায়ক্রমে সেটইন্টারওয়াল () ব্যবহার করেন তবে আপনি এমন একটি এজ্যাক্স কল করেন যা মাঝে মাঝে ফিরে আসতে 2 সেকেন্ড সময় নেয় আপনি প্রথম প্রতিক্রিয়া ফিরে আসার আগেই আবার একটি অজ্যাক্স কল করবেন। এটি সাধারণত অনাকাঙ্ক্ষিত।

অনেক লাইব্রেরিতে পর্যায়ক্রমিক পদ্ধতি রয়েছে যা নির্বিঘ্নে সেটইন্টারভাল ব্যবহার করার ক্ষতির বিরুদ্ধে সুরক্ষা দেয় যেমন নেলসনের দেওয়া প্রোটোটাইপ উদাহরণ।

এতে একটি jQuery এজাক্স কল রয়েছে এমন একটি ফাংশন সহ আরও দৃ period় পর্যায়ক্রমিক সম্পাদন অর্জন করতে, এরকম কিছু বিবেচনা করুন:

function myPeriodicMethod() {
  $.ajax({
    url: ..., 
    success: function(data) {
      ...
    },
    complete: function() {
      // schedule the next request *only* when the current one is complete:
      setTimeout(myPeriodicMethod, 1000);
    }
  });
}

// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);

আরেকটি পদ্ধতি হ'ল সেটটাইমআউট ব্যবহার করুন তবে একটি ভেরিয়েবলের মধ্যে অতিবাহিত সময়কে ট্র্যাক করা এবং তারপরে প্রতিটি আবেদনের গতিশীলভাবে সময়সীমা বিলম্ব সেট করে যতটা সম্ভব কাঙ্ক্ষিত বিরতির কাছাকাছি কোনও ফাংশন সম্পাদন করতে পারবেন তবে আপনি প্রতিক্রিয়াগুলি ফিরে পেতে পারেন না তার চেয়ে বেশি দ্রুত।


সেটটাইমআউট (myPeriodicMethod, 1000); 2 বার বলা হয়। এটা requred হয়? আমি মনে করি নির্ধারিত সময়টি কেবলমাত্র সম্পূর্ণ কার্যক্রমে ডাকা উচিত
বিষ্ণুদেব কে

1
হ্যাঁ দ্বিতীয় সেটটাইমআউট () এর কোনও প্রয়োজন নেই, আপনি কেবল মাইপরিওডিকমেথোড () কল করতে পারবেন যা অবিলম্বে প্রথম এজাক্স কলটি করবে ... তবে আপনি যদি প্রথম কল থেকে বিলম্বের সাথে সময় নির্ধারণ করতে চান তবে আপনি এটি লিখতে পারতেন আমি লিখেছি.
ম্যাট কুরব্রু

16

প্রত্যেকেরই ইতিমধ্যে একটি সেটটাইমআউট / সেটআইন্টারওয়াল সমাধান রয়েছে। আমি মনে করি যে এটি উল্লেখ করা গুরুত্বপূর্ণ যে আপনি কেবল স্ট্রিংগুলিতেই নয়, সেটআপ ইন্টারভালটিতে ফাংশনগুলি পাস করতে পারেন। স্ট্রিংগুলির পরিবর্তে প্রকৃত ফাংশনগুলি পাস করার জন্য এটি সম্ভবত কিছুটা "নিরাপদ" যা সেই ফাংশনে "স্পষ্ট" হয়ে যাবে।

// example 1
function test() {
  alert('called');
}
var interval = setInterval(test, 10000);

বা:

// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);

3
+1 আপনি যদি জাভাস্ক্রিপ্টের ক্রকফোর্ড বিদ্যালয়ের শিক্ষার্থী হন তবে আপনি এর সমস্ত খারাপ রূপগুলিতে স্পষ্ট হন না।
প্যাট্রিক ম্যাকএলহানি

@ পেট্রিক - আমি মনে করি না যে "নামগুলিতে $ (ডলার চিহ্ন) বা \ (ব্যাকস্ল্যাশ) ব্যবহার করবেন না" পরামর্শটি jQuery এর সাথে ভালভাবে নেমে যাবে :)
রাশ ক্যাম

6

পুরানো প্রশ্ন তবে .. আমারও একটি পর্যায়ক্রমিক টাস্ক রানার দরকার ছিল এবং আমি টাস্কটাইমার লিখেছিলাম । এটি যখন আপনার বিভিন্ন বিরতিতে একাধিক টাস্ক চালানোর প্রয়োজন হয় তখন এটিও কার্যকর।

// Timer with 1000ms (1 second) base interval resolution.
var timer = new TaskTimer(1000)

// Add task(s) based on tick intervals.
timer.addTask({
    name: 'job1',       // unique name of the task
    tickInterval: 5,    // run every 5 ticks (5 x interval = 5000 ms)
    totalRuns: 10,      // run 10 times only. (set to 0 for unlimited times)
    callback: function (task) {
        // code to be executed on each run
        console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
    }
});

// Start the timer
timer.start();

TaskTimerব্রাউজার এবং নোড উভয়ই কাজ করে। সমস্ত বৈশিষ্ট্য জন্য ডকুমেন্টেশন দেখুন ।



3

হ্যাঁ - কটাক্ষপাত করা setIntervalএবংsetTimeout নির্দিষ্ট সময়ে কোড নির্বাহ জন্য। সেট ইনটারওয়াল হ'ল সময় সময় কোড এক্সিকিউট করার জন্য ব্যবহার করা।

ব্যবহারের জন্য এখানে একটি ডেমো দেখুন এবং উত্তর দিন


2
function test() {
 alert('called!');
}
var id = setInterval('test();', 10000); //call test every 10 seconds.
function stop() { // call this to stop your interval.
   clearInterval(id);
}


1

নেটিভ উপায়টি প্রকৃতপক্ষে setInterval()/ clearInterval(), তবে আপনি যদি ইতিমধ্যে প্রোটোটাইপ লাইব্রেরি ব্যবহার করে থাকেন তবে আপনি পিরিওডিক্যাল এক্সেকিউটারের সুবিধা নিতে পারেন:

new PeriodicalUpdator(myEvent, seconds);

এটি ওভারল্যাপিং কলগুলি প্রতিরোধ করে। Http://www.prototypejs.org/api/periodicalExecuter থেকে :

"এটি আপনাকে কলব্যাক ফাংশনের একাধিক সমান্তরাল সম্পাদনের বিরুদ্ধে রক্ষা করে, প্রদত্ত ব্যবধানটি কার্যকর করতে বেশি সময় নেওয়া উচিত (এটি একটি অভ্যন্তরীণ" চলমান "পতাকা বজায় রাখে, যা কলব্যাক ফাংশনে ব্যতিক্রমগুলির বিরুদ্ধে রক্ষিত থাকে) এটি বিশেষত কার্যকর যদি আপনি ব্যবহার করেন তবে প্রদত্ত বিরতিতে ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি ব্যবহার করুন (উদাহরণস্বরূপ প্রম্পট ব্যবহার করুন বা কলটি কনফার্ম করুন): এটি কার্যকর হওয়ার জন্য অপেক্ষা করা একাধিক বার্তা বাক্সগুলি এড়াবে। "

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