জাভাস্ক্রিপ্টে প্রতিশ্রুতি ক্লাস
এই প্রবন্ধে, আমরা জাভাস্ক্রিপ্টে প্রতিশ্রুতি ক্লাস ব্যাখ্যা করব।
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
আরও সহজভাবে লেখার জন্য একটি সিনট্যাক্স।
আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।