প্রথমত, আমি বুঝতে পারি যে আমি এই প্রশ্নের উত্তর দিতে দেরি করছি।
সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস নিয়ে আলোচনা করার আগে আসুন আমরা কীভাবে প্রোগ্রামগুলি চালিত হয় তা সংক্ষেপে দেখি।
ইন সমলয় ক্ষেত্রে, প্রতিটি বিবৃতি সমাপ্ত করার আগে পরবর্তী প্রতিবেদনটি চালানো হয়। এই ক্ষেত্রে প্রোগ্রামটি বিবৃতিগুলির ক্রম অনুসারে মূল্যায়ন করা হয়।
এইভাবে জাভাস্ক্রিপ্টে অ্যাসিঙ্ক্রোনাস কাজ করে। জাভাস্ক্রিপ্ট ইঞ্জিনে দুটি অংশ রয়েছে, একটি অংশ যা কোডটি দেখায় এবং ক্রিয়াকলাপকে সজ্জিত করে এবং অন্যটি সারিটি প্রক্রিয়া করে। সারি প্রক্রিয়াকরণটি একটি থ্রেডে ঘটে, এজন্য একবারে কেবলমাত্র একটি অপারেশন হতে পারে।
যখন একটি অ্যাসিঙ্ক্রোনাস অপারেশন (দ্বিতীয় ডাটাবেস ক্যোয়ারির মতো) দেখা যায়, কোডটি পার্স করা হয় এবং ক্রিয়াকলাপটি কাতারে রাখা হয়, তবে এই অপারেশনটি সম্পূর্ণ হওয়ার পরে একটি কলব্যাক চালানোর জন্য নিবন্ধিত হয়। কাতারে ইতিমধ্যে এটিতে অনেকগুলি অপারেশন থাকতে পারে। কাতারের সামনের অপারেশনটি প্রক্রিয়াজাত করা হয় এবং সারি থেকে সরানো হয়। ডাটাবেস ক্যোয়ারির অপারেশনটি একবার প্রক্রিয়া করা হয়ে গেলে, অনুরোধটি ডাটাবেসে প্রেরণ করা হয় এবং সম্পূর্ণ হয়ে গেলে কলব্যাক কার্যকর করা হবে। এই সময়ে, কাতারি প্রসেসর অপারেশনটি "পরিচালনা" করার পরে পরবর্তী অপারেশনটির দিকে চলে যায় - এই ক্ষেত্রে
console.log("Hello World");
ডাটাবেস ক্যোয়ারী এখনও প্রক্রিয়া করা হচ্ছে, তবে কনসোল.লগ অপারেশনটি সারির সামনের দিকে এবং প্রক্রিয়াজাত হয়ে যায়। এটি একটি সিঙ্ক্রোনাস অপারেশন হ'ল তাত্ক্ষণিকভাবে কার্যকর করা হবে যার ফলে অবিলম্বে "হ্যালো ওয়ার্ল্ড" আউটপুট আসবে। কিছু সময় পরে, ডাটাবেস অপারেশন সম্পূর্ণ হয়, কেবল তখনই ক্যোয়ারির সাথে নিবন্ধিত কলব্যাকটি কল করা হয় এবং প্রক্রিয়াজাত করা হয়, ভেরিয়েবল ফলাফলের মানকে সারিতে সেট করে।
এটি সম্ভব যে একটি অ্যাসিনক্রোনাস অপারেশনের ফলে অন্য একটি অ্যাসিনক্রোনাস অপারেশন হবে, এই দ্বিতীয় অপারেশনটি কাতারে রাখা হবে এবং যখন এটি কাতারের সামনের দিকে আসে তখন এটি প্রক্রিয়াভুক্ত হবে। অ্যাসিঙ্ক্রোনাস অপারেশনের সাথে নিবন্ধিত কলব্যাককে কল করা জাভাস্ক্রিপ্টের রান টাইম কীভাবে অপারেশনটির ফলাফলটি সম্পন্ন হয় তা ফিরিয়ে দেয়।
কোন জাভাস্ক্রিপ্ট অপারেশন অ্যাসিনক্রোনাস হয় তা জানার একটি সহজ পদ্ধতিটি কলব্যাকের প্রয়োজন কিনা তা লক্ষ্য করা যায় - কলব্যাকটি এমন কোড যা প্রথম ক্রিয়াকলাপটি শেষ হলে কার্যকর করা হবে। প্রশ্নের দুটি উদাহরণে আমরা দেখতে পাচ্ছি যে কেবলমাত্র দ্বিতীয় কেসের একটি কলব্যাক রয়েছে, সুতরাং এটি উভয়ের অ্যাসিনক্রোনাস অপারেশন। অ্যাসিঙ্ক্রোনাস অপারেশনের ফলাফলটি পরিচালনা করার বিভিন্ন শৈলীর কারণে এটি সর্বদা হয় না।
আরও জানতে, প্রতিশ্রুতি সম্পর্কে পড়ুন। প্রতিশ্রুতিবদ্ধতা হল আরেকটি উপায় যেখানে অ্যাসিক্রোনাস অপারেশনের ফলাফল পরিচালনা করা যায়। প্রতিশ্রুতি সম্পর্কে সুন্দর জিনিস হ'ল কোডিং স্টাইলটি আরও বেশি সিঙ্ক্রোনাস কোডের মতো বোধ করে।
নোড 'fs' এর মতো অনেক লাইব্রেরি কিছু ক্রিয়াকলাপের জন্য উভয় সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস স্টাইল সরবরাহ করে। যে ক্ষেত্রে অপারেশনটি বেশি সময় নেয় না এবং প্রচুর পরিমাণে ব্যবহৃত হয় না - যেমন কোনও কনফিগারেশন ফাইল পড়ার ক্ষেত্রে - সিঙ্ক্রোনাস স্টাইল ক্রিয়াকলাপের ফলে কোডটি পড়া সহজ হয়।