উত্তর:
নিম্নলিখিতটি রয়েছে:
setTimeout(function, milliseconds);
ফাংশন যা ফাংশনটি কার্যকর করা হবে তার পরে সময় পার হতে পারে।
দেখুন: উইন্ডো setTimeout()
পদ্ধতি ।
function_reference
আপনি অন্তর্ভুক্ত না করে এটি অবিলম্বে কার্যকর করা হবে না ()
। অর্থাৎ function_reference
ঠিক এটি - একটি রেফারেন্স; প্রবেশ function_reference()
করলে তাৎক্ষণিকভাবে ফাংশনটি শুরু করা হত।
অন্য প্রত্যেকে যা বলেছেন তা কেবল যুক্ত করতে setTimeout
: আপনি যদি ভবিষ্যতে কোনও প্যারামিটার দিয়ে কোনও ফাংশন কল করতে চান তবে আপনাকে কিছু বেনামী ফাংশন কল সেট আপ করতে হবে need
আপনার পরে ফাংশনটি কল করার জন্য এটি একটি আর্গুমেন্ট হিসাবে পাস করতে হবে। বাস্তবে এর অর্থ নামের পিছনে বন্ধনী ছাড়াই। নিম্নলিখিতগুলি একবারে সতর্কতাকে কল করবে এবং এটি 'হ্যালো ওয়ার্ল্ড' প্রদর্শন করবে:
var a = "world";
setTimeout(alert("Hello " + a), 2000);
এটি ঠিক করার জন্য আপনি কোনও ফাংশনের নাম রাখতে পারবেন (যেমন ফ্লুব্বা করেছেন) অথবা আপনি কোনও বেনামি ফাংশন ব্যবহার করতে পারেন। আপনার যদি কোনও প্যারামিটারটি পাস করতে হয় তবে আপনাকে একটি বেনামি ফাংশন ব্যবহার করতে হবে।
var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";
তবে আপনি যদি সেই কোডটি চালান তবে লক্ষ্য করবেন যে 2 সেকেন্ড পরে পপআপটি 'হ্যালো স্ট্যাক ওভারফ্লো' বলবে। এটি কারণ ভেরিয়েবল এর মান সেই দুই সেকেন্ডে পরিবর্তিত হয়েছে। দুই সেকেন্ড পরে 'হ্যালো ওয়ার্ল্ড' বলার জন্য, আপনাকে নিম্নলিখিত কোড স্নিপেট ব্যবহার করতে হবে:
function callback(a){
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";
এটি 2 সেকেন্ড অপেক্ষা করবে এবং তারপরে 'হ্যালো ওয়ার্ল্ড' পপআপ করবে।
কেবল সামান্য প্রসারিত করার জন্য ... আপনি সরাসরি setTimeout
কলটিতে কোড সম্পাদন করতে পারেন , তবে @ পেট্রিকের বক্তব্য অনুসারে আপনি সাধারণত একটি কলব্যাক ফাংশন বরাদ্দ করেন। সময়টি মিলি সেকেন্ডের
setTimeout(func, 4000);
function func() {
alert('Do stuff here');
}
আপনি যদি সত্যিই কোনও ব্লকিং (সিঙ্ক্রোনাস) 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>
delay
ইনগ করার আগে ডমকে রিফ্রেশ করতে পারি ( এই প্রশ্নের উত্তর দেওয়ার জন্য )। এটি করার কোনও উপায় আছে?
আপনার সেটটাইমআউট ব্যবহার করতে হবে এবং এটি একটি কলব্যাক ফাংশনটি পাস করতে হবে। আপনি জাভাস্ক্রিপ্টে ঘুম ব্যবহার করতে পারবেন না কারণ হ'ল এই সময়ের মধ্যে আপনি পুরো পৃষ্ঠাটি কোনও কাজ থেকে আটকাবেন। ভাল পরিকল্পনা নয়। জাভাস্ক্রিপ্টের ইভেন্টের মডেলটি ব্যবহার করুন এবং খুশি থাকুন। এটি যুদ্ধ করবেন না!
নিয়মিত বিরতিতে কিছু কোড বারবার চালানোর জন্য আপনি উইন্ডো.সেটইন্টারওয়াল () ব্যবহার করতে পারেন ।
setTimeout()
এটি একবার করে, setInterval()
বারবার করে। আপনি যদি চান যে আপনার কোডটি প্রতি 5 সেকেন্ডে চালানো setInterval()
হয় তবে তা কাজের জন্য তৈরি।
পূর্ববর্তী মন্তব্যগুলি যুক্ত করতে, আমি নিম্নলিখিতটি বলতে চাই:
setTimeout()
জাভাস্ক্রিপ্ট ফাংশন SE স্ক্রিপ্ট প্রতি সঞ্চালনের বিরাম না, কিন্তু নিছক কম্পাইলার ভবিষ্যতে কোড একদা চালানো বলে।
এমন কোনও ফাংশন নেই যা জাভাস্ক্রিপ্টে অন্তর্নিহিত মৃত্যুদন্ড কার্যকর করতে পারে। তবে, আপনি আপনার নিজের ফাংশনটি লিখতে পারেন যা Date()
ফাংশনটি ব্যবহার করে এবং আপনার প্রয়োজনীয় সময়ের ব্যবধানটি যোগ করে সময় না আসা পর্যন্ত শর্তহীন লুপের মতো কিছু করে does
আপনার যদি কেবলমাত্র বিলম্ব পরীক্ষা করতে হয় তবে আপনি এটি ব্যবহার করতে পারেন:
function delay(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}
এবং তারপরে আপনি যদি 2 সেকেন্ডের জন্য বিলম্ব করতে চান তবে আপনি যা করুন:
delay(2000);
যদিও উত্পাদনের জন্য সেরা নাও হতে পারে। মন্তব্যগুলিতে এটি সম্পর্কে আরও
কেন আপনি একটি প্রতিশ্রুতি পিছনে কোড রাখতে পারবেন না? (আমার মাথার উপরের অংশে টাইপ করা)
new Promise(function(resolve, reject) {
setTimeout(resolve, 2000);
}).then(function() {
console.log('do whatever you wanted to hold off on');
});
কল করার তিনটি ভিন্ন পদ্ধতির সাথে আমি সত্যিই মরিয়াসের ব্যাখ্যা (সর্বাধিক উন্নত প্রতিক্রিয়া) পছন্দ করেছি setTimeout
।
আমার কোডে আমি একটি এজেএক্স সেভ ইভেন্ট শেষ হওয়ার পরে পূর্ববর্তী পৃষ্ঠায় স্বয়ংক্রিয়ভাবে নেভিগেট করতে চাই। সেভ ইভেন্টটি সম্পূর্ণ হওয়ার সিএসএসে একটি সামান্য অ্যানিমেশন রয়েছে যা ইঙ্গিত করে সেভ সফল হয়েছিল।
আমার কোডে আমি প্রথম দুটি উদাহরণের মধ্যে একটি পার্থক্য পেয়েছি:
setTimeout(window.history.back(), 3000);
এইটি সময়সীমার জন্য অপেক্ষা করে না - পিছনে () প্রায় দেরি করে ডাকা হয় যাই হোক না কেন আমি বিলম্বের জন্য কোন নম্বর রেখেছি।
তবে এটি এটিকে পরিবর্তন করে:
setTimeout(function() {window.history.back()}, 3000);
আমি যা আশা করছিলাম এটি ঠিক তাই করে।
এটি ব্যাক () অপারেশনের সাথে সুনির্দিষ্ট নয়, একই সাথে ঘটে alert()
। মূলত alert()
প্রথম ক্ষেত্রে ব্যবহৃত সঙ্গে , বিলম্ব সময় উপেক্ষা করা হয়। আমি যখন পপআপ বরখাস্ত করি তখন CSS এর জন্য অ্যানিমেশনটি অবিরত থাকে।
সুতরাং, আমি দ্বিতীয় বা তৃতীয় পদ্ধতির সুপারিশ করব যা তিনি বর্ণনা করেছেন এমনকি আপনি যদি অন্তর্নির্মিত ফাংশনগুলি ব্যবহার না করে ব্যবহার করছেন are
আমার কিছু এজাক্স কমান্ড ছিল যার মধ্যে আমি বিলম্ব করে দৌড়াতে চাই। এটি করার এক উপায়ের একটি সাধারণ উদাহরণ এখানে। আমি আমার প্রচলিত পদ্ধতির জন্য যদিও টুকরো টুকরো করা হতে প্রস্তুত। :)
// 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
বিলম্ব কার্য:
/**
* delay or pause for some time
* @param {number} t - time (ms)
* @return {Promise<*>}
*/
const delay = async t => new Promise(resolve => setTimeout(resolve, t));
async
ফাংশন ভিতরে ব্যবহার :
await delay(1000);
অন্যরা যেমন বলেছে, সেটটাইমআউটটি আপনার নিরাপদ বাজি
তবে কখনও কখনও আপনি যুক্তিকে একটি নতুন ফাংশনে আলাদা করতে পারবেন না তবে আপনি ডিলিট.নু () ব্যবহার করতে পারেন মিলিসেকেন্ডগুলি পেতে এবং নিজেই বিলম্ব করতে পারেন ....
function delay(milisecondDelay) {
milisecondDelay += Date.now();
while(Date.now() < milisecondDelay){}
}
alert('Ill be back in 5 sec after you click OK....');
delay(5000);
alert('# Im back # date:' +new Date());