javascript অবজ জাভাস্ক্রিপ্ট ব্যবহার করে নির্দিষ্ট বিলম্বের পরে স্ক্রিপ্ট এক্সিকিউট করুন




জাভাস্ক্রিপ্ট বাংলা বই (12)

JQuery delay() অথবা wait() মতো কোনও জাভাস্ক্রিপ্ট পদ্ধতি আছে wait() নির্দিষ্ট সময়ের জন্য কোন স্ক্রিপ্টটি কার্যকর করার সময় বিলম্বিত)?


বিলম্বের সাথে আপনার ফাংশন কল করার সবচেয়ে সহজ সমাধান হল:

function executeWithDelay(anotherFunction) {
    setTimeout(anotherFunction, delayInMilliseconds);
}

শুধু সামান্য সম্প্রসারিত করতে ... আপনি সরাসরি setTimeout কলটিতে কোডটি চালাতে পারেন, কিন্তু @patrick setTimeout বলেছেন, আপনি সাধারণত setTimeout মতো একটি কলব্যাক ফাংশন বরাদ্দ করেন। সময় মিলিসেকেন্ড হয়

setTimeout(func, 4000);
function func() {
    alert('Do stuff here');
}

setTimeout কল করার জন্য তিনটি ভিন্ন পদ্ধতির সাথে আমি মরিয়াসের ব্যাখ্যা (সর্বোচ্চ আপত্তিকর প্রতিক্রিয়া) পছন্দ setTimeout

আমার কোডে আমি একটি AJAX সংরক্ষণ ইভেন্টটি সম্পন্ন করার পরে পূর্ববর্তী পৃষ্ঠায় স্বয়ংক্রিয়ভাবে স্বয়ং-নেভিগেট করতে চাই। সংরক্ষণের ইভেন্টটি সিএসএসে সামান্য অ্যানিমেশন আছে যা ইঙ্গিত করে যে সেভটি সফল হয়েছে।

আমার কোডে আমি প্রথম দুটি উদাহরণের মধ্যে একটি পার্থক্য খুঁজে পেয়েছি:

setTimeout(window.history.back(), 3000);

এইটি সময়সীমার জন্য অপেক্ষা করে না - পিছনে () প্রায় অবিলম্বে বলা হয় তবে কোনও বিলম্বের জন্য আমি কোনও নম্বর রাখি না।

যাইহোক, এই পরিবর্তন:

setTimeout(function() {window.history.back()}, 3000);

এই আমি আশা ছিল ঠিক কি।

এটি ব্যাক () ক্রিয়াকলাপের জন্য নির্দিষ্ট নয়, এটি alert() ঘটে। মূলত alert() প্রথম ক্ষেত্রে ব্যবহৃত, বিলম্ব সময় উপেক্ষা করা হয়। আমি পপআপ খারিজ করলে সিএসএসের জন্য অ্যানিমেশন চলতে থাকবে।

এইভাবে, আমি যদি দ্বিতীয় বা তৃতীয় পদ্ধতির কথা বলি তবে সেগুলি বর্ণনা করে যে আপনি যদি ফাংশনগুলি তৈরি করেন এবং আর্গুমেন্টগুলি ব্যবহার না করেন।


কেন আপনি একটি প্রতিশ্রুতি পিছনে কোড রাখা যাবে না? (আমার মাথা উপরের বন্ধ typed)

new Promise(function(resolve, reject) {
  setTimeout(resolve, 2000);
}).then(function() {
  console.log('do whatever you wanted to hold off on');
});


আমি কিছু বিলম্ব Ajax কমান্ড আমি মধ্যে বিলম্ব সঙ্গে চালাতে চেয়েছিলেন। এখানে এমন একটি উপায়ের একটি সহজ উদাহরণ। আমি আমার অপ্রচলিত পদ্ধতির জন্য যদিও shreds ripped করা প্রস্তুত। :)

//  Show current seconds and milliseconds
//  (I know there are other ways, I was aiming for minimal code
//  and fixed width.)
function secs()
{
    var s = Date.now() + ""; s = s.substr(s.length - 5);
  return s.substr(0, 2) + "." + s.substr(2);
}

//  Log we're loading
console.log("Loading: " + secs());

//  Create a list of commands to execute
var cmds = 
[
    function() { console.log("A: " + secs()); },
    function() { console.log("B: " + secs()); },
    function() { console.log("C: " + secs()); },
    function() { console.log("D: " + secs()); },
    function() { console.log("E: " + secs()); },
  function() { console.log("done: " + secs()); }
];

//  Run each command with a second delay in between
var ms = 1000;
cmds.forEach(function(cmd, i)
{
    setTimeout(cmd, ms * i);
});

// Log we've loaded (probably logged before first command)
console.log("Loaded: " + secs());

আপনি কোড ব্লক অনুলিপি করতে এবং এটি একটি কনসোল উইন্ডোতে পেস্ট করতে পারেন এবং কিছু দেখতে পারেন:

Loading: 03.077
Loaded: 03.078
A: 03.079
B: 04.075
C: 05.075
D: 06.075
E: 07.076
done: 08.076

নিম্নলিখিত আছে:

setTimeout(function, milliseconds);

ফাংশন কার্যকর করা হবে, যা সময় পাস করা যেতে পারে।

দেখুন: উইন্ডো setTimeout() পদ্ধতি


সহজ উত্তর হল:

setTimeout(
    function () {
        x = 1;
    }, 1000);

উপরের ফাংশনটি 1 সেকেন্ড (1000 মিএস) এর জন্য অপেক্ষা করে তারপর x থেকে 1 সেট করে। স্পষ্টতই এটি একটি উদাহরণ; আপনি বেনামী ফাংশন ভিতরে আপনি চান কিছু করতে পারেন।


আপনি নিয়মিত বিরতিতে বারবার কিছু কোড চালানোর জন্য window.setInterval() ব্যবহার করতে পারেন।


সেট setTimeout সম্পর্কে অন্যরা যা বলেছে তা যোগ করার জন্য: ভবিষ্যতে একটি প্যারামিটারের সাহায্যে কোনও ফাংশন কল করতে চান তবে আপনাকে কিছু বেনামী ফাংশন কল সেট আপ করতে হবে।

পরে ফাংশনটির জন্য এটি একটি যুক্তি হিসাবে পাস করতে হবে। এর অর্থ এই নামের পিছনে বন্ধনী ছাড়া মানে। নিম্নলিখিত সতর্কবার্তা একবারে কল করবে, এবং এটি 'হ্যালো ওয়ার্ল্ড' প্রদর্শন করবে:

var a = "world";
setTimeout(alert("Hello " + a), 2000);

এটি ঠিক করার জন্য আপনি একটি ফাংশন নামটি (ফ্লুব্বাটি করেছেন) নাম বা আপনি একটি বেনামী ফাংশন ব্যবহার করতে পারেন। আপনি একটি পরামিতি পাস করতে হবে, তাহলে আপনি একটি বেনামী ফাংশন ব্যবহার করতে হবে।

var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "";

কিন্তু যদি আপনি সেই কোডটি চালান তবে আপনি লক্ষ্য করবেন যে ২ সেকেন্ড পর পপআপ 'হ্যালো স্ট্যাক ওভারফ্লো' বলবে। এর কারণ হল পরিবর্তনশীলের মান সেই দুই সেকেন্ডে পরিবর্তিত হয়েছে। দুই সেকেন্ডের পরে 'হ্যালো ওয়ার্ল্ড' বলার জন্য আপনাকে নিম্নলিখিত কোড স্নিপেটটি ব্যবহার করতে হবে:

function callback(a){
    return function(){
        alert("Hello " + a);
    }
}
var a = "world";
setTimeout(callback(a), 2000);
a = "";

এটি 2 সেকেন্ড অপেক্ষা করবে এবং তারপর 'হ্যালো ওয়ার্ল্ড' পপআপ করবে।


আপনি শুধুমাত্র একটি বিলম্ব পরীক্ষা করার প্রয়োজন হলে আপনি এই ব্যবহার করতে পারেন:

function delay(ms) {
   ms += new Date().getTime();
   while (new Date() < ms){}
}

এবং তারপর যদি আপনি 2 সেকেন্ডের জন্য বিলম্ব করতে চান তবে আপনি করবেন:

delay(2000);

যদিও উৎপাদন জন্য ভাল হতে পারে না। মন্তব্য যে আরো


পূর্ববর্তী মন্তব্য যোগ করার জন্য, আমি নিম্নলিখিত বলতে চাই:

জাভাস্ক্রিপ্টে setTimeout() ফাংশনটি প্রতি সেকেন্ডে স্ক্রিপ্টটি কার্যকর করতে বাধা দেয় না, তবে ভবিষ্যতে কোডটি কার্যকর করার জন্য কেবলমাত্র কম্পাইলারকে বলে।

এমন একটি ফাংশন নেই যা আসলে জাভাস্ক্রিপ্টে নির্বাহ করা বিরাম দেয়। যাইহোক, আপনি আপনার নিজের ফাংশনটি লিখতে পারেন যা কোনও শর্তহীন লুপের মতো করে, যতক্ষণ না সময় Date() ফাংশনটি ব্যবহার করে এবং আপনার প্রয়োজনীয় সময়কালের ব্যবধান যোগ করে সময় পৌঁছে যায়।


আপনি যদি সত্যিই একটি ব্লকিং (সিঙ্ক্রোনাস) delay ফাংশন (যেকোনও জন্য) করতে চান তবে কেন এমন কিছু করবেন না:

<script type="text/javascript">
    function delay(ms) {
        var cur_d = new Date();
        var cur_ticks = cur_d.getTime();
        var ms_passed = 0;
        while(ms_passed < ms) {
            var d = new Date();  // Possible memory leak?
            var ticks = d.getTime();
            ms_passed = ticks - cur_ticks;
            // d = null;  // Prevent memory leak?
        }
    }

    alert("2 sec delay")
    delay(2000);
    alert("done ... 500 ms delay")
    delay(500);
    alert("done");
</script>




settimeout