জাভাস্ক্রিপ্টে প্রতিশ্রুতি ক্লাস
এই প্রবন্ধে, আমরা জাভাস্ক্রিপ্টে প্রতিশ্রুতি ক্লাস ব্যাখ্যা করব।
YouTube Video
Promise
Promise ক্লাস অ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনার জন্য একটি ক্লাস। এটি অপারেশন সফল হলে ফলাফল পরিচালনা করে বা যদি ব্যর্থ হয় তবে ত্রুটি পরিচালনা করে। পরম্পরাগতভাবে, অ্যাসিঙ্ক্রোনাস অপারেশন শেষ হওয়ার জন্য অপেক্ষা করার সময় কলব্যাক ফাংশন ব্যবহৃত হত, কিন্তু Promise এটিকে আরও পরিষ্কার এবং কার্যক্ষম করে তোলে।
1const promise = new Promise((resolve, reject) => {
2 setTimeout(() => resolve("Done!"), 1000);
3});
4
5// Displays "Done!" after 1 second
6promise.then(result => console.log(result));- এই কোডটি একটি অ্যাসিনক্রোনাস প্রক্রিয়ার উদাহরণ, যা এক সেকেন্ড পর "Done!" প্রদর্শন করে।
- প্রথমে,
new Promiseব্যবহার করে একটি নতুনPromiseঅবজেক্ট তৈরি করা হয়। আর্গুমেন্ট হিসেবে একটি ফাংশন দেওয়া হয়, যা দুটি কলব্যাক নেয়: সফলতার জন্যresolveএবং ব্যর্থতার জন্যreject। setTimeoutব্যবহার করা হয় যাতে এক সেকেন্ড পরresolve()ফাংশনটি কল হয়।promiseঅবজেক্টেরthen()মেথড সম্পন্ন হওয়ার জন্য অপেক্ষা করে এবং ফলাফল প্রদর্শন করে।
- প্রথমে,
মৌলিক কাঠামো
Promise একটি অবজেক্ট, যা শেষে হয় হয়তো সফলতা অথবা ব্যর্থতা নিয়ে।
1const promise = new Promise((resolve, reject) => {
2 // Asynchronous operation
3 // Flag indicating whether the operation was successful
4 const success = true;
5
6 if (success) {
7 resolve('Operation successful!');
8 } else {
9 reject('An error occurred');
10 }
11});- সফলতার ক্ষেত্রে,
resolve()কল করা হয়। - ব্যর্থতার ক্ষেত্রে,
reject()কল করা হয়।
Promise অবজেক্টের তিনটি অবস্থা রয়েছে।
1promise
2 .then((result) => {
3 console.log(result);
4 })
5 .catch((error) => {
6 console.error(error);
7 })- মুলতুবি
- অ্যাসিনক্রোনাস প্রক্রিয়াটি এখনও সম্পন্ন হয়নি।
- সম্পন্ন
- অ্যাসিনক্রোনাস প্রক্রিয়াটি সফল হয়েছে এবং
resolve()দ্বারা ফলাফল ফেরত দেয়। ফলাফলটিthen()মেথড ব্যবহার করে পাওয়া যায়।
- অ্যাসিনক্রোনাস প্রক্রিয়াটি সফল হয়েছে এবং
- প্রত্যাখ্যাত
- অ্যাসিনক্রোনাস প্রক্রিয়াটি ব্যর্থ হয়েছে এবং
reject()দ্বারা একটি এরর হয়েছে। এররটিcatch()মেথড ব্যবহার করে ধরা হয়।
- অ্যাসিনক্রোনাস প্রক্রিয়াটি ব্যর্থ হয়েছে এবং
then() এবং catch() মেথড
Promise ব্যবহার করে, আপনি সংজ্ঞায়িত করতে পারেন যে একটি অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন হলে কী করতে হবে। এর জন্য, আপনি then() এবং catch() মেথড ব্যবহার করবেন।
then()
1const promise = new Promise((resolve, reject) => {
2 resolve('Operation successful!');
3});
4
5promise.then((result) => {
6 console.log(result); // "Operation successful!"
7});then()মেথডটি এমন একটি ফাংশন নির্ধারণ করে যাPromiseসফল হলে কল করা হবে।
catch()
1const promise = new Promise((resolve, reject) => {
2 reject('An error occurred');
3});
4
5promise.catch((error) => {
6 console.error(error); // "An error occurred"
7});catch()মেথডটি এমন একটি ফাংশন নির্ধারণ করে যাPromiseব্যর্থ হলে কল করা হবে।
finally() মেথড
1const promise = new Promise((resolve, reject) => {
2 resolve('Operation successful!');
3});
4
5promise
6 .then((result) => {
7 console.log(result);
8 })
9 .catch((error) => {
10 console.error(error);
11 })
12 .finally(() => {
13 console.log('The operation has completed');
14 });finally()মেথডটি এমন কোড সংজ্ঞায়িত করে যা শেষ পর্যন্ত কার্যকর হবে,Promiseসফল বা ব্যর্থ যাই হোক না কেন।
then() চেইন
then() একটি নতুন Promise ফেরত দেয়, তাই আপনি পরবর্তী then() চেইন করতে পারেন।
1const promise = new Promise((resolve, reject) => {
2 setTimeout(() => {
3 resolve(1);
4 }, 1000);
5});
6
7promise
8 .then(result => {
9 console.log(result); // 1
10 return result + 1;
11 })
12 .then(result => {
13 console.log(result); // 2
14 return result + 1;
15 })
16 .then(result => {
17 console.log(result); // 3
18 })
19 .catch(error => {
20 console.error(error.message); // Something went wrong
21 });- এই কোডে, প্রাথমিক
resolve()মান ১ পাঠায়, এবং প্রতিটিthenথেকে ফেরত আসা মান পরবর্তীthen-এ পাঠানো হয়। catch()ব্যবহার করে, আপনি চেইনে যেকোনো ত্রুটি এক জায়গায় হ্যান্ডেল করতে পারেন।
ব্যবহারিক উদাহরণ
উদাহরণস্বরূপ, Promises প্রায়ই একটি সার্ভার থেকে ডেটা আনতে ব্যবহৃত হয়। আসুন আমরা fetch() API ব্যবহার করার একটি উদাহরণ দেখি।
1fetch('https://codesparklab.com/json/example.json')
2 .then(response => {
3 if (!response.ok) {
4 throw new Error('Network error');
5 }
6 return response.json();
7 })
8 .then(data => {
9 console.log(data);
10 })
11 .catch(error => {
12 console.error('Error:', error);
13 });- এই কোডে, যেহেতু
fetch()একটিPromiseফেরত দেয়, তাই সার্ভার থেকে প্রতিক্রিয়া পাওয়ার পর ডেটা প্রক্রিয়া করার জন্যthen()ব্যবহার করা হয়। ত্রুটি সমাধানের জন্যcatch()ব্যবহার করা হয়।
একাধিক প্রমিস পরিচালনা
Promise.all()
একাধিক Promises একযোগে কার্যকর করতে এবং কেবল তখনই এগিয়ে যেতে যখন সবগুলো সফল হয়, Promise.all() ব্যবহার করুন।
1const promise1 = Promise.resolve(1);
2const promise2 = Promise.resolve(2);
3const promise3 = Promise.resolve(3);
4
5Promise.all([promise1, promise2, promise3])
6 .then((results) => {
7 console.log(results); // [1, 2, 3]
8 })
9 .catch((error) => {
10 console.error('Error :', error);
11 });- সব
Promisesসফল হলে কেবলমাত্রthen()ডাকা হয়। যদি একটি ব্যর্থ হয়, তবেcatch()ডাকা হয়।
Promise.allSettled()
আপনি যদি একাধিক Promise একসাথে চালাতে এবং সফলতা বা ব্যর্থতা নির্বিশেষে সব ফলাফল পেতে চান, তাহলে Promise.allSettled() ব্যবহার করুন।
1const promise1 = Promise.resolve(1);
2const promise2 = Promise.reject("Failed");
3const promise3 = Promise.resolve(3);
4
5Promise.allSettled([promise1, promise2, promise3])
6 .then((results) => {
7 results.forEach(result => console.log(result));
8 // [
9 // { status: 'fulfilled', value: 1 },
10 // { status: 'rejected', reason: 'Failed' },
11 // { status: 'fulfilled', value: 3 }
12 // ]
13 });- সব
Promiseমিটে গেলে (যথা পূরণ বা প্রত্যাখ্যান), একবারthen()ডাকা হয়। প্রতি ফলে একটিstatusপ্রপার্টি থাকে ('fulfilled'অথবা'rejected')। কিছু ব্যর্থ হলেও, সেটি অন্যান্য অপারেশনে প্রভাব ফেলে না।
Promise.race()
Promise.race() সেই Promise-এর ফলাফল ফেরত দেয়, যা প্রথমে সম্পন্ন বা প্রত্যাখ্যাত হয়।
1const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'First'));
2const promise2 = new Promise((resolve) => setTimeout(resolve, 500, 'Second'));
3
4Promise.race([promise1, promise2]).then((result) => {
5 console.log(result); // "First"
6});- এই উদাহরণের মতো, প্রথম সম্পূর্ণ হওয়া
Promiseএর ফলাফল ফেরত দেওয়া হয়।
async/await এর সাথে সম্পর্ক
async/await সিনট্যাক্স ব্যবহার করলে আপনি Promises আরও সহজভাবে লিখতে পারেন। একটি async ফাংশন সর্বদা একটি Promise ফেরত দেয় এবং await সেই Promise সমাধান হওয়ার জন্য অপেক্ষা করে।
1async function fetchData() {
2 try {
3 const response = await fetch('https://codesparklab.com/json/example.json');
4 const data = await response.json();
5 console.log(data);
6 } catch (error) {
7 console.error('Error :', error);
8 }
9}
10
11fetchData();এই পদ্ধতিতে async/await ব্যবহার করলে অ্যাসিনক্রোনাস অপারেশনগুলো সিঙ্ক্রোনাস কোডের মতো লেখা যায়, যা পড়া সহজ করে।
সারসংক্ষেপ
Promiseহল অ্যাসিনক্রোনাস অপারেশনের সফলতা বা ব্যর্থতা পরিচালনার জন্য একটি অবজেক্ট।- সফল অপারেশন
then()দিয়ে এবং ত্রুটিcatch()দিয়ে পরিচালনা করুন। finally()সেই কোড সংজ্ঞায়িত করে যা সফলতা বা ব্যর্থতা নির্বিশেষে শেষ পর্যন্ত কার্যকর হয়।- আপনি একাধিক
Promiseএকসঙ্গে পরিচালনা করতেPromise.all()বাPromise.race()ব্যবহার করতে পারেন। async/awaitহলPromiseআরও সহজভাবে লেখার জন্য একটি সিনট্যাক্স।
আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।