জাভাস্ক্রিপ্টে প্রতিশ্রুতি ক্লাস

জাভাস্ক্রিপ্টে প্রতিশ্রুতি ক্লাস

এই প্রবন্ধে, আমরা জাভাস্ক্রিপ্টে প্রতিশ্রুতি ক্লাস ব্যাখ্যা করব।

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 আরও সহজভাবে লেখার জন্য একটি সিনট্যাক্স।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video