জাভাস্ক্রিপ্টে সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস রয়েছে ফাংশন রয়েছে।
সিঙ্ক্রোনাস ফাংশন
জাভাস্ক্রিপ্টে বেশিরভাগ ফাংশন সিঙ্ক্রোনাস। আপনি যদি একটি সারিতে বেশ কয়েকটি সিঙ্ক্রোনাস ফাংশন কল করতে পারেন
doSomething();
doSomethingElse();
doSomethingUsefulThisTime();
তারা ক্রমে কার্যকর করা হবে। সম্পূর্ণ doSomethingElse
না হওয়া পর্যন্ত শুরু হবে না doSomething
। doSomethingUsefulThisTime
পরিবর্তে, doSomethingElse
সম্পূর্ণ না হওয়া পর্যন্ত শুরু হবে না ।
অ্যাসিঙ্ক্রোনাস ফাংশন
অ্যাসিঙ্ক্রোনাস ফাংশন, তবে একে অপরের জন্য অপেক্ষা করবে না। আসুন আমরা আমাদের উপরে যে একই কোডের নমুনাটি দেখি, এবার ধরে নিই যে ফাংশনগুলি অবিচ্ছিন্ন
doSomething();
doSomethingElse();
doSomethingUsefulThisTime();
ফাংশনগুলি ক্রমে শুরু করা হবে, তবে সেগুলি একই সময়ে মোটামুটি কার্যকর করা হবে। আপনি কোনটি প্রথমে শেষ করবেন তা ধারাবাহিকভাবে অনুমান করতে পারবেন না: সঞ্চালনের জন্য স্বল্পতম সময় গ্রহণের ক্ষেত্রে যেটি ঘটে তা প্রথমে শেষ হবে।
তবে কখনও কখনও, আপনি ক্রমগুলি কার্যকর করতে অ্যাসিনক্রোনাসযুক্ত ফাংশনগুলি চান এবং কখনও কখনও আপনি এমন ফাংশনগুলি চান যা সংশ্লেষপূর্ণভাবে অ্যাসিঙ্ক্রোনালি সম্পাদন করতে পারে to ভাগ্যক্রমে, যথাক্রমে কলব্যাক এবং সময়সীমা দ্বারা এটি সম্ভব।
Callbacks
আসুন অনুমান আমরা তিনটি অ্যাসিঙ্ক্রোনাস ফাংশন আছে যে আমরা যাতে চালানো করতে চাই, some_3secs_function
, some_5secs_function
, এবং some_8secs_function
।
যেহেতু ফাংশনগুলি জাভাস্ক্রিপ্টে আর্গুমেন্ট হিসাবে পাস করা যেতে পারে, আপনি ফাংশনটি শেষ হওয়ার পরে কার্যকর করতে একটি কলব্যাক হিসাবে একটি ফাংশন পাস করতে পারেন।
আমরা যদি এই মত ফাংশন তৈরি
function some_3secs_function(value, callback){
//do stuff
callback();
}
তারপরে আপনি ঠিকানায় কল করতে পারেন, এর মতো:
some_3secs_function(some_value, function() {
some_5secs_function(other_value, function() {
some_8secs_function(third_value, function() {
//All three functions have completed, in order.
});
});
});
সময় সমাপ্ত
জাভাস্ক্রিপ্টে, আপনি একটি নির্দিষ্ট সময়সীমা (মিলি সেকেন্ডে) পরে কার্যকর করার জন্য একটি ফাংশন বলতে পারেন। এটি, কার্যত সিঙ্ক্রোনাস ফাংশনগুলি অবিচ্ছিন্নভাবে আচরণ করতে পারে।
আমাদের যদি তিনটি সিঙ্ক্রোনাস ফাংশন থাকে তবে আমরা ফাংশনটি ব্যবহার করে এটিকে সংবিধানে চালিত করতে পারি setTimeout
।
setTimeout(doSomething, 10);
setTimeout(doSomethingElse, 10);
setTimeout(doSomethingUsefulThisTime, 10);
এটি অবশ্য কিছুটা কুৎসিত এবং DRY নীতি [উইকিপিডিয়া] লঙ্ঘন করে । আমরা এটিকে একটি ফাংশন তৈরি করে কিছুটা পরিষ্কার করতে পারি যা ফাংশনগুলির একটি অ্যারে এবং একটি সময়সীমা গ্রহণ করে।
function executeAsynchronously(functions, timeout) {
for(var i = 0; i < functions.length; i++) {
setTimeout(functions[i], timeout);
}
}
এটিকে এভাবে বলা যেতে পারে:
executeAsynchronously(
[doSomething, doSomethingElse, doSomethingUsefulThisTime], 10);
সংক্ষেপে, আপনার যদি সিঙ্ক্রোনালি কার্যকর করতে চান এমন অ্যাসিঙ্ক্রোনাস ফাংশন থাকে, কলব্যাকগুলি ব্যবহার করুন এবং যদি আপনার সিঙ্ক্রোনাস ফাংশন থাকে যা আপনি অ্যাসিঙ্ক্রোনালি সম্পাদন করতে চান, টাইমআউটগুলি ব্যবহার করুন।