সংজ্ঞা
"অ্যাসিনক্রোনাস" শব্দটি কিছুটা পৃথক অর্থের জন্য ব্যবহার করা যেতে পারে, ফলস্বরূপ এখানে আপাতদৃষ্টিতে বিরোধী উত্তর পাওয়া যায়, যদিও তারা আসলে তা নয়। আসিনক্রোনির উইকিপিডিয়ায় এই সংজ্ঞা রয়েছে:
কম্পিউটার প্রোগ্রামিংয়ে অ্যাসিনক্রনি মূল প্রোগ্রাম প্রবাহের চেয়ে পৃথক ইভেন্টগুলির সংঘটন এবং এই জাতীয় ঘটনাগুলি মোকাবিলার উপায়গুলি বোঝায়। এটি "বাহ্যিক" ইভেন্টগুলি হতে পারে যেমন সিগন্যালগুলির আগমন, বা কোনও প্রোগ্রামের দ্বারা উত্সাহিত ক্রিয়াকলাপগুলি প্রোগ্রামের ফলাফলের জন্য অপেক্ষা করতে বাধা না দিয়ে প্রোগ্রামের প্রয়োগের সাথে সাথে ঘটে থাকে।
নন-জাভাস্ক্রিপ্ট কোড জাভাস্ক্রিপ্টের ইভেন্টের কিছু ক্যুতে এই জাতীয় "বাইরের" ইভেন্টগুলিকে সারি করতে পারে। তবে এটি যতদূর যায়।
প্রিম্পশন নেই
আপনার স্ক্রিপ্টে কিছু অন্যান্য জাভাস্ক্রিপ্ট কোড চালানোর জন্য জাভাস্ক্রিপ্ট কোড চালানোর কোনও বাহ্যিক বাধা নেই । জাভাস্ক্রিপ্টের টুকরোগুলি একের পর এক সম্পাদিত হয় এবং প্রতিটি ইভেন্টের সারিতে ইভেন্টগুলির ক্রম এবং সেই সারিগুলির অগ্রাধিকার দ্বারা আদেশটি নির্ধারিত হয়।
উদাহরণস্বরূপ, আপনি নিখুঁতভাবে নিশ্চিত হতে পারেন যে নিম্নলিখিত কোডের টুকরোগুলি কার্যকর করার সময় আর কোনও জাভাস্ক্রিপ্ট (একই স্ক্রিপ্টে) কার্যকর হবে না:
let a = [1, 4, 15, 7, 2];
let sum = 0;
for (let i = 0; i < a.length; i++) {
sum += a[i];
}
অন্য কথায়, জাভাস্ক্রিপ্টে কোনও পূর্বশক্তি নেই । ইভেন্টের সারিতে যাই থাকুক না কেন, এই জাতীয় কোডের অংশটি শেষ না হওয়া পর্যন্ত এই ইভেন্টগুলির প্রসেসিংয়ের জন্য অপেক্ষা করতে হবে। ইকামাস্ক্রিপ্ট স্পেসিফিকেশন বিভাগ 8.4 বিভাগে এবং চাকরির সারিতে বলেছেন :
কোনও কাজের ফাঁসি কার্যকর করা কেবল তখনই শুরু করা যেতে পারে যখন কোনও চলমান কার্যকরকরণ প্রসঙ্গ না থাকে এবং এক্সিকিউশন কনটেক্সট স্ট্যাকটি খালি থাকে।
অ্যাসিঙ্ক্রোনির উদাহরণ
যেমন অন্যরা ইতিমধ্যে লিখেছেন, এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে জাভাস্ক্রিপ্টে অ্যাসিঙ্ক্রোনি কার্যকর হয় এবং এটিতে সর্বদা একটি ইভেন্টের সারি জড়িত থাকে, যা জাভা স্ক্রিপ্টের কার্যকর হতে পারে যখন অন্য কোনও জাভাস্ক্রিপ্ট কোড কার্যকর করা হয় না:
setTimeout(): এজেন্ট (যেমন ব্রাউজার) সময়সীমা শেষ হওয়ার পরে ইভেন্টের সারিতে একটি ইভেন্ট রাখবে। সময়টির পর্যবেক্ষণ এবং কাতারে ইভেন্টটি স্থাপন জাভাস্ক্রিপ্ট কোড দ্বারা ঘটে এবং তাই আপনি ভাবতে পারেন যে এটি কিছু জাভাস্ক্রিপ্ট কোডের সম্ভাব্য সম্পাদনের সমান্তরালে ঘটেছে। তবে প্রদত্ত কলব্যাক setTimeoutকেবল তখনই কার্যকর করতে পারে যখন বর্তমানে কার্যকর হওয়া জাভাস্ক্রিপ্ট কোডটি সমাপ্তিতে পৌঁছেছে এবং উপযুক্ত ইভেন্টের সারিটি পড়া হচ্ছে being
fetch(): এজেন্ট কোনও এইচটিটিপি অনুরোধ সম্পাদনের জন্য ওএস ফাংশন ব্যবহার করবে এবং যে কোনও আগত প্রতিক্রিয়ার জন্য নিরীক্ষণ করবে। আবার, এই জাভাস্ক্রিপ্ট-টাস্কটি কিছু জাভাস্ক্রিপ্ট কোডের সমান্তরালে চলতে পারে যা এখনও চালানো হচ্ছে। কিন্তু প্রতিশ্রুতি সমাধানের পদ্ধতিটি, যা দ্বারা প্রতিশ্রুতি ফিরে fetch()পেয়েছে তা সমাধান করবে কেবলমাত্র বর্তমানে কার্যকর হওয়া জাভাস্ক্রিপ্ট সম্পূর্ণ হওয়ার পরে চলেছে ute
requestAnimationFrame(): ব্রাউজারের রেন্ডারিং ইঞ্জিন (নন-জাভাস্ক্রিপ্ট) যখন কোনও পেইন্ট অপারেশন করার জন্য প্রস্তুত হয় তখন জাভাস্ক্রিপ্ট কাতারে একটি ইভেন্ট স্থাপন করবে। জাভাস্ক্রিপ্ট ইভেন্টটি প্রক্রিয়া করা হলে কলব্যাক ফাংশনটি কার্যকর করা হয়।
queueMicrotask(): তাত্ক্ষণিকভাবে মাইক্রোটাস্ক সারিতে একটি ইভেন্ট স্থাপন করে। কল স্ট্যাক খালি থাকলে এবং ইভেন্টটি গ্রাস হয়ে গেলে কলব্যাক কার্যকর করা হবে।
আরও অনেক উদাহরণ রয়েছে, তবে এই সমস্ত ফাংশনগুলি মূল একমাস্ক্রিপ্ট দ্বারা নয়, হোস্ট পরিবেশ দ্বারা সরবরাহ করা হয়েছে। কোর ইকামাস্ক্রিপ্টের সাহায্যে আপনি সিঙ্ক্রোনসের সাহায্যে একটি প্রতিশ্রুতি কাজ কাতারে একটি ইভেন্ট স্থাপন করতে পারেন Promise.resolve()।
ভাষা গঠন
ECMAScript যেমন asynchrony প্যাটার্ন সমর্থন করার জন্য বিভিন্ন ভাষা নির্মান, প্রদান করে yield, async, await। তবে কোনও ভুল হওয়ার সুযোগ না দিন: কোনও জাভাস্ক্রিপ্ট কোড কোনও বাহ্যিক ইভেন্ট দ্বারা বাধাগ্রস্ত হবে না । "বিঘ্ন" যা সরবরাহ করে yieldএবং awaitমনে হয় কেবল কোনও ফাংশন কল থেকে ফিরে আসার এবং এর কার্য সম্পাদন প্রসঙ্গে পুনরুদ্ধার করার পরে কেবল জেএস কোড (ক্ষেত্রে yield) বা ইভেন্টের সারি (ইভেন্টের সারি) পুনরুদ্ধার করার একটি নিয়ন্ত্রিত pred await)।
ডিওএম ইভেন্ট হ্যান্ডলিং
যখন জাভাস্ক্রিপ্ট কোডটি ডিওএম এপিআই অ্যাক্সেস করে, এটি কিছু ক্ষেত্রে ডম এপিআইকে এক বা একাধিক সিঙ্ক্রোনাস নোটিফিকেশন তৈরি করতে পারে। এবং যদি আপনার কোডটিতে ইভেন্ট হ্যান্ডলারটি শুনে তা থাকে তবে এটি কল করা হবে।
এটি প্রাক-উদ্দীপক সম্মতি হিসাবে দেখা দিতে পারে, তবে তা নয়: একবার আপনার ইভেন্ট হ্যান্ডলার (গুলি) ফিরলে, ডম এপিআই শেষ পর্যন্ত ফিরে আসবে এবং মূল জাভাস্ক্রিপ্ট কোডটি অবিরত থাকবে।
অন্যান্য ক্ষেত্রে ডম এপিআই যথাযথ ইভেন্ট সারিতে কেবল একটি ইভেন্ট প্রেরণ করবে এবং কল স্ট্যাক খালি হয়ে যাওয়ার পরে জাভাস্ক্রিপ্ট এটিকে বেছে নেবে।
দেখুন সমলয় এবং অ্যাসিঙ্ক্রোনাস ঘটনা