কম্পিউটার

জাভাস্ক্রিপ্ট স্লিপ মেথড বিদ্যমান নেই:এর পরিবর্তে কী ব্যবহার করবেন

আপনি যদি বিভিন্ন প্রোগ্রামিং ভাষা থেকে আসা একজন প্রকৌশলী বা বিকাশকারী হন, তাহলে আপনি হয়ত sleep() নামে একটি স্থানীয় পদ্ধতি ব্যবহার করেছেন। কার্যকর করা থেকে একটি পদ্ধতি স্টল বা বিরতি দেওয়া। জাভাস্ক্রিপ্টের এমন একটি নেটিভ পদ্ধতি নেই।

এই নিবন্ধে, আমরা একটি ঘুম ফাংশন অনুকরণ করতে জাভাস্ক্রিপ্ট ব্যবহার করার দুটি ভিন্ন উপায় সম্পর্কে কথা বলব:প্রতিশ্রুতি এবং অ্যাসিঙ্ক/অপেক্ষা ফাংশন৷

অসিঙ্ক্রোনাস ফাংশনের ভূমিকা

আমাদের প্রথমে setTimeout() উল্লেখ না করে জাভাস্ক্রিপ্টে প্রতিশ্রুতি বা অ্যাসিঙ্ক/ওয়েট ফাংশন সম্পর্কে কথা বলা উচিত নয়। সংক্ষেপে পদ্ধতি। এই পদ্ধতিটি দেখাবে কেন জাভাস্ক্রিপ্টে প্রতিশ্রুতি প্রয়োজন।

জাভাস্ক্রিপ্ট একক-থ্রেডেড

যখন আমরা বলি জাভাস্ক্রিপ্ট একটি একক-থ্রেডেড ভাষা, আমরা যা বলতে চাচ্ছি তা হল জাভাস্ক্রিপ্টে শুধুমাত্র একটি কল স্ট্যাক এবং একটি মেমরি হিপ রয়েছে। একটি উচ্চ স্তরে, এর মানে জাভাস্ক্রিপ্ট কোড পড়ে, একটি সময়ে একটি লাইন, ক্রমানুসারে, এবং পরবর্তী লাইনে যাওয়ার আগে অবশ্যই কোডের একটি অংশ কার্যকর করতে হবে। এটি জাভাস্ক্রিপ্টকে প্রকৃতির দ্বারা সিঙ্ক্রোনাস করে তোলে। মাঝে মাঝে, আমাদের কোডকে অ্যাসিঙ্ক্রোনাস করার জন্য আমাদের চারপাশে কাজ করতে হবে।

সিঙ্ক্রোনাস কোড বনাম অ্যাসিঙ্ক্রোনাস কোড

এই উদাহরণটি একবার দেখুন।

//synchronous
console.log("This will print first")
console.log("This will print second")
console.log("This will print third");

বেশ সোজা, তাই না? প্রতিটি console.logs পর্যায়ক্রমে প্রিন্ট করবে কারণ জাভাস্ক্রিপ্ট সেগুলিকে ধারাবাহিকভাবে কার্যকর করে।

ধরা যাক আমরা লাইন দুইটি লাইন তিনের আগে প্রিন্ট করতে চাই? কিভাবে আমরা মূলত সেই console.logটি প্রিন্ট করতে পারি পালার বাহিরে? আমরা এটি setTimeout() দিয়ে করতে পারি :

//setTimeout
console.log("This will print first")
 
setTimeout(() => {
console.log("This will print third")
}, 1000);
 
console.log("This will print second");

setTimeout() আমাদের থ্রেড ব্লক না করে একটি জাভাস্ক্রিপ্ট ফাংশন চালানোর অনুমতি দেয় যাতে অন্য কোড চলতে পারে। প্রথম আর্গুমেন্ট হল কলব্যাক ফাংশন যা নির্দিষ্ট সময়ের (দ্বিতীয় আর্গুমেন্ট) পরে চলে। দ্বিতীয় যুক্তিটি মিলিসেকেন্ডের একটি সংখ্যায় উপস্থাপন করা হয়।

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগদানের পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।

এই setTimeout() পদ্ধতিটি ঘুমের পদ্ধতির অনুকরণ করে যা অন্যান্য ভাষায় স্থানীয়:

  1. জাভাস্ক্রিপ্ট ইঞ্জিন যখন setTimeout() চালায় তখন পটভূমিতে একটি টাইমার সেট করা ফাংশন
  2. টাইমারের কাউন্টডাউনের সাথে সাথে অন্যান্য কোড চালানো চালিয়ে যাওয়া
  3. setTimeout()-এ কলব্যাক ফাংশন নির্বাহ করা হচ্ছে যখন টাইমার শূন্যে পৌঁছায়।

কিভাবে setTimeout() বোঝা যাচ্ছে প্রতিশ্রুতি এবং async/await ফাংশনগুলি কীভাবে কাজ করে তা বোঝার জন্য কাজগুলি গুরুত্বপূর্ণ। আমরা পরবর্তী প্রতিশ্রুতি কভার করব।

প্রতিশ্রুতি

একটি প্রতিশ্রুতি তৈরি করা

প্রতিশ্রুতিগুলি অ্যাসিঙ্ক্রোনাস লজিক সঞ্চালনের একটি উপায়। প্রতিশ্রুতি কনস্ট্রাক্টর একটি কলব্যাক ফাংশন গ্রহণ করে যার দুটি প্যারামিটার রয়েছে:সমাধান এবং প্রত্যাখ্যান। এই কলব্যাক ফাংশনে লজিক রয়েছে যা, একবার শেষ হলে, একটি রেসপন্স বা প্রত্যাখ্যান ফাংশন একটি রেসপন্স দিয়ে প্রত্যাখ্যান করবে।

console.log("before promise")
let promise = new Promise((resolve, reject) => {
   let resolvedFlag = false; 
//this is just a flag so we can intentionally throw the response to test logic
   console.log("first");
   console.log("second")
   console.log("third")
   console.log("fourth");
   resolvedFlag = true; //flip resolved to true once all console logs are done
   
   if(resolvedFlag) { //if resolved is true invoke the resolve function 	
        
resolve("Promise resolved");
console.log("after promise");
 
 
   } else { // else invoke the reject function with a new Error object with message
     reject(new Error("Promise failed")); 
     console.log("after promise");
   }
 });

এখানে কোড স্নিপেট একটি সহজ প্রতিশ্রুতি প্রদর্শন করে। প্রতিশ্রুতি তিনটি রাজ্যে হতে পারে:

মুলতুবি৷ – মীমাংসা বা প্রত্যাখ্যান নয় – এটি প্রতিশ্রুতির প্রাথমিক অবস্থা

সমাধান করা হয়েছে৷ - সফল সম্পাদন

প্রত্যাখ্যান করা হয়েছে - সম্পাদনে ত্রুটি

একটি সমাধান করা প্রতিশ্রুতি এবং একটি প্রত্যাখ্যাত প্রতিশ্রুতির রেজোলিউশন প্রদর্শন করতে উপরের কোড স্নিপেটে সমাধানকৃত ফ্ল্যাগটিকে সত্য থেকে মিথ্যাতে টগল করার চেষ্টা করুন৷

মনে রাখার প্রধান বিষয় হল এই প্রতিশ্রুতিতে একটি ফাংশন রয়েছে যা প্রতিশ্রুতি সমাধান বা প্রত্যাখ্যান না হওয়া পর্যন্ত স্ক্রিপ্টের সম্পাদনকে বিরতি দেয়। তারপর স্ক্রিপ্ট আবার শুরু হয়।

একটি প্রতিশ্রুতি প্রতিক্রিয়া ব্যবহার করা

যখন আমরা একটি প্রতিশ্রুতির একটি উদাহরণ শুরু করি, তখন আমরা then() ব্যবহার করি এবং catch() প্রত্যাবর্তিত প্রতিশ্রুতি থেকে প্রতিক্রিয়া পাওয়ার পরে আমরা যে যুক্তিটি ব্যবহার করতে চাই তা নির্ধারণ করতে। এটি একটি বিবৃতি হিসাবে রাখা হয়েছে - একটি উচ্চ স্তরের ওভারভিউ এর মত দেখাচ্ছে:

প্রতিশ্রুতি। তারপর(func).catch(func);

বন্ধনীতে যেটি তারপর এবং ক্যাচ পদ্ধতিগুলিকে আমন্ত্রণ জানায় তা হল একটি বেনামী ফাংশন যার প্রতিক্রিয়া একটি প্যারামিটার হিসাবে পাস করা হয়েছে৷

promise // the promise we created above in prev code snippet.
   .then(response => { // hits here if successful response
// the logic that happens on successful response
     console.log(response); 
     console.log("after promise");
   })
   .catch(error => { // catches any errors here.
// the logic that happens on error response
     console.log(error.message);
     console.log("after promise");
   })

একটি ডাটাবেসে কল করার সময় বা একটি HTTP অনুরোধ করার সময় প্রতিশ্রুতিগুলি প্রায়শই ব্যবহৃত হয়।

অসিঙ্ক/অপেক্ষা ফাংশন

চূড়ান্ত উপায়ে আমরা sleep() অনুকরণ করতে পারি পদ্ধতি async/await ফাংশন ব্যবহার করে। মূলত, এই অ্যাসিঙ্ক্রোনাস ফাংশনগুলি একই যুক্তি তৈরি করার আরেকটি উপায় যা আমরা প্রতিশ্রুতিতে ব্যবহার করব, তবে কম কোড সহ।

শব্দটি async function এর আগে স্থাপন করা হয় প্রাক-ES6 ফাংশনে কীওয়ার্ড এবং ES6+ ফাংশনে প্যারামিটারের আগে। যেকোন লজিক যা আপনি এগিয়ে যাওয়ার আগে করতে চান কোডের এই ব্লকে যায়।

const firstFunction = () => { // logic that you want to have done asynchronously
       let resolved = true;
      
       if(resolved) {
         let respObj = { message: "Resolved!"};   
         return respObj.message;
       } else {
         let errObj = { message: "Error!"};
         return errObj.message;
       }
     }
    
     const asyncExample = async () => { 
// async keyword before where parameters would go
       console.log("Calling function...");
       let result = await firstFunction();
// await goes before the invocation of the function that contains your logic.
// won't go to the next line until the function is done. 
       console.log(result);
       return result;
     }
    
     asyncExample() // invokes the async/await function

async/await ফাংশন ব্যবহার করার ফলে কার্যত একই অ্যাসিঙ্ক্রোনাস প্রতিশ্রুতি-ভিত্তিক প্রক্রিয়া হয় কিন্তু কম কোড সহ।

উপসংহার

এই নিবন্ধে আমরা sleep() অনুকরণ করার উপায়গুলি দেখেছি ফাংশন যা অন্যান্য প্রোগ্রামিং ভাষার নেটিভ। আমরা setTimeout() ব্যবহার করেছি অ্যাসিঙ্ক্রোনাস জাভাস্ক্রিপ্ট ফাংশনগুলির ধারণা প্রদর্শন করতে যাতে আমরা প্রতিশ্রুতি এবং অ্যাসিঙ্ক/ওয়েট ফাংশনগুলি দেখতে পারি৷


  1. জাভাস্ক্রিপ্ট পপ পদ্ধতি:এটি কী এবং কীভাবে এটি ব্যবহার করবেন

  2. জাভাস্ক্রিপ্টে test() পদ্ধতির ব্যবহার কি?

  3. জাভাস্ক্রিপ্ট দুর্বলম্যাপে .clear() পদ্ধতির ব্যবহার কী?

  4. ঘুমের () জাভাস্ক্রিপ্ট সংস্করণ কি?