কারণ ব্রাউজারে জাভাস্ক্রিপ্টটি একক থ্রেডযুক্ত (ওয়েবকর্মীরা ছাড়া যা এখানে জড়িত নয়) এবং জাভাস্ক্রিপ্টের কার্যকরকরণের একটি থ্রেড অন্য চালানোর আগে সম্পূর্ণ হতে চলেছে, আপনার বক্তব্য:
while(flag==false) {}
কেবলমাত্র চিরকাল চলবে (বা ব্রাউজারটি কোনও প্রতিক্রিয়াবিহীন জাভাস্ক্রিপ্ট লুপ সম্পর্কে অভিযোগ না করা পর্যন্ত) পৃষ্ঠাটি স্তব্ধ হয়ে যাবে এবং অন্য কোনও জাভাস্ক্রিপ্ট কখনও চালানোর সুযোগ পাবে না, সুতরাং পতাকাটির মান কখনই পরিবর্তন করা যায় না।
আরও কিছুটা ব্যাখ্যার জন্য, জাভাস্ক্রিপ্ট একটি ইভেন্ট চালিত ভাষা । তার অর্থ এটি জাভাস্ক্রিপ্টের এক টুকরো চালায় যতক্ষণ না এটি দোভাষীটিতে নিয়ন্ত্রণ ফিরিয়ে দেয়। তারপরে, এটি যখন অনুবাদকের কাছে ফিরে আসে তখনই জাভাস্ক্রিপ্ট ইভেন্টের সারি থেকে পরবর্তী ইভেন্টটি পেয়ে এটি চালায়।
টাইমার এবং নেটওয়ার্ক ইভেন্টের মতো সমস্ত জিনিস ইভেন্টের সারি দিয়ে চলে। সুতরাং, যখন টাইমার গুলি চালায় বা কোনও নেটওয়ার্কের অনুরোধ উপস্থিত হয়, এটি বর্তমানে চলমান জাভাস্ক্রিপ্টটিকে কখনই "বাধা" দেয় না। পরিবর্তে, কোনও ইভেন্ট জাভাস্ক্রিপ্ট ইভেন্টের কাতারে পরে যায় এবং তারপরে, যখন বর্তমানে চলমান জাভাস্ক্রিপ্ট শেষ হয়, পরবর্তী ইভেন্টটি ইভেন্টের সারি থেকে টানা হয় এবং এটি চলার পালা পায়।
সুতরাং, যখন আপনি একটি অসীম লুপ করবেন while(flag==false) {}
, বর্তমানে চলমান জাভাস্ক্রিপ্ট কখনই শেষ হয় না এবং এভাবে পরবর্তী ইভেন্টটি ইভেন্টের সারি থেকে কখনই টানা হয় না এবং এভাবে flag
কখনই এর মান পরিবর্তন হয় না। তারা এখানে কী জাভাস্ক্রিপ্ট চালিত বাধা হয় না । যখন একটি টাইমার গুলি চালায়, এটি বর্তমানে চলমান জাভাস্ক্রিপ্ট বাধা দেয় না, অন্য কোনও জাভাস্ক্রিপ্ট চালান এবং তারপরে বর্তমানে চলমান জাভাস্ক্রিপ্টটি চালিয়ে যেতে দিন। এটি বর্তমানে চলমান জাভাস্ক্রিপ্টটি চালানোর পালা পাওয়ার জন্য না করা পর্যন্ত ইভেন্টের কাতারে অপেক্ষা করে।
আপনাকে যা করতে হবে তা হল আপনার কোডটি কীভাবে কাজ করে তা পুনর্বিবেচনা করা এবং flag
মান পরিবর্তনের সময় আপনি যে কোডটি চালাতে চান তা ট্রিগার করার জন্য আলাদা উপায় খুঁজে বের করতে । জাভাস্ক্রিপ্ট একটি ইভেন্ট চালিত ভাষা হিসাবে ডিজাইন করা হয়েছে। সুতরাং, আপনাকে যা করার দরকার তা হ'ল কোন ইভেন্টগুলিতে আপনি আগ্রহের নিবন্ধন করতে পারবেন যাতে আপনি পতাকাটি পরিবর্তনের কারণ হতে পারে এমন ইভেন্টের জন্য শুনতে পারেন এবং আপনি সেই ইভেন্টে পতাকাটি পরীক্ষা করতে পারেন বা আপনি নিজের ইভেন্টটি ট্রিগার করতে পারেন যে কোনও কোড পতাকা পরিবর্তন করতে পারে বা আপনি একটি কলব্যাক ফাংশন প্রয়োগ করতে পারেন যে পতাকাটি যেই কোড পরিবর্তন করে তা আপনার কলব্যাক কল করতে পারে যখনই পতাকাটির মান পরিবর্তন করার জন্য দায়ী কোডের অংশটি এর মান পরিবর্তন করে true
, এটি কেবল কলব্যাক ফাংশনকে কল করে এবং এইভাবে আপনার কোডটি পতাকাটি সেট হয়ে গেলে এটি চলতে চায়true
সঠিক সময়ে চালানো হবে। এটি নিয়মিত পতাকাটির মান পরীক্ষা করতে কোনও ধরণের টাইমার ব্যবহার করার চেষ্টা করার চেয়ে অনেক বেশি দক্ষ।
function codeThatMightChangeFlag(callback) {
if (condition happens to change flag value) {
callback();
}
}
jQuery.Deferred
,Q
,async
, ...