catchError() এবং retry() এর মাধ্যমে Error Handling

Error Handling Operators - আরএক্সজেএস (RxJS) - Web Development

258

RxJS (Reactive Extensions for JavaScript) অ্যাসিঙ্ক্রোনাস ডেটা স্ট্রিম এবং ইভেন্ট হ্যান্ডলিংয়ের জন্য একটি শক্তিশালী লাইব্রেরি। অ্যাসিঙ্ক্রোনাস কাজের মধ্যে অনেক সময় ত্রুটি (error) ঘটতে পারে, এবং সেগুলির সঠিকভাবে হ্যান্ডল করা প্রোগ্রামের স্থিতিশীলতা নিশ্চিত করতে গুরুত্বপূর্ণ। catchError() এবং retry() দুটি জনপ্রিয় RxJS অপারেটর, যেগুলি ত্রুটি হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয় এবং ডেটা স্ট্রিমে ত্রুটির ক্ষেত্রে পুনরায় চেষ্টা (retry) করতে সহায়তা করে।

এই দুটি অপারেটর কীভাবে কাজ করে এবং কীভাবে সেগুলি error handling এর জন্য ব্যবহার করা যায়, তা এখানে আলোচনা করা হবে।


1. catchError() অপারেটর

catchError() অপারেটরটি ব্যবহৃত হয় যখন কোনো Observable এর মধ্যে ত্রুটি (error) ঘটে এবং ত্রুটি হ্যান্ডলিংয়ের জন্য fallback Observable প্রদান করতে হয়। এটি মূল Observable থেকে error ধরা এবং সেই error এর পরিবর্তে একটি নতুন Observable বা fallback ভ্যালু রিটার্ন করার জন্য ব্যবহার করা হয়।

বৈশিষ্ট্য:

  • Error Handling: ত্রুটি ঘটলে তার পরিবর্তে fallback Observable প্রদান করা হয়।
  • Error Recovery: স্ট্রিমের ত্রুটি ধরা এবং তাকে handle করার জন্য একটি অন্য Observable প্রদান করা যায়।

উদাহরণ:

import { of } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { throwError } from 'rxjs';

const observable = new Observable((observer) => {
  observer.next('First value');
  observer.next('Second value');
  observer.error('An error occurred'); // Error occurs here
});

observable.pipe(
  catchError((error) => {
    console.log('Caught error:', error);
    return of('Fallback value'); // Return a fallback value in case of error
  })
).subscribe({
  next: (value) => console.log(value),
  error: (err) => console.log('Error:', err),
  complete: () => console.log('Completed'),
});

আউটপুট:

Received: First value
Received: Second value
Caught error: An error occurred
Received: Fallback value
Completed

এখানে, catchError() ত্রুটি ধরেছে এবং একটি fallback value (Fallback value) পাঠিয়েছে, এবং ত্রুটি ছাড়া স্ট্রিম সম্পন্ন হয়েছে।


2. retry() অপারেটর

retry() অপারেটরটি যখন কোনো Observable ত্রুটি (error) দেয়, তখন এটি পুনরায় সেই Observable চালানোর চেষ্টা করে। আপনি কতবার retry করতে চান, তা নির্ধারণ করতে পারেন। সাধারণত এটি সেগুলির জন্য ব্যবহৃত হয় যেখানে ত্রুটি অস্থায়ী (temporary) হয় এবং পুনরায় চেষ্টা করা সম্ভব।

বৈশিষ্ট্য:

  • Retry Mechanism: ত্রুটি ঘটলে নির্দিষ্ট সংখ্যক বার পুনরায় চেষ্টা করা হয়।
  • Error Recovery: এটি ত্রুটির পুনরায় চেষ্টা করার জন্য একটি retry লজিক তৈরি করতে সাহায্য করে।

উদাহরণ:

import { of, throwError } from 'rxjs';
import { retry, catchError } from 'rxjs/operators';

const observable = new Observable((observer) => {
  observer.next('First value');
  observer.next('Second value');
  observer.error('An error occurred'); // Error occurs here
});

observable.pipe(
  retry(2),  // Retry up to 2 times
  catchError((error) => {
    console.log('Caught error after retries:', error);
    return of('Fallback value'); // Return a fallback value if retries fail
  })
).subscribe({
  next: (value) => console.log(value),
  error: (err) => console.log('Error:', err),
  complete: () => console.log('Completed'),
});

আউটপুট:

Received: First value
Received: Second value
Caught error after retries: An error occurred
Received: Fallback value
Completed

এখানে, retry(2) অপারেটরটি ত্রুটির পরে ২ বার পুনরায় চেষ্টা করেছে। পুনরায় চেষ্টা করার পরেও ত্রুটি ঘটলে catchError() ফালব্যাক ভ্যালু পাঠিয়েছে।


3. retryWhen() অপারেটর

retryWhen() অপারেটরটি আরও কাস্টম retry লজিক তৈরি করতে ব্যবহৃত হয়। এটি error এর উপর ভিত্তি করে পুনরায় চেষ্টা করার কৌশল নির্ধারণ করতে সহায়তা করে। আপনি এটি দিয়ে পুনরায় চেষ্টা করার জন্য একটি কাস্টম Observable প্রদান করতে পারেন, যা ত্রুটি ঘটলে retry করতে সাহায্য করে।

বৈশিষ্ট্য:

  • Custom Retry Logic: আপনি retry করার জন্য একটি কাস্টম Observable ব্যবহার করতে পারেন।
  • Delay Mechanism: আপনি retry এর মধ্যে বিলম্ব (delay) যুক্ত করতে পারেন।

উদাহরণ:

import { throwError, of } from 'rxjs';
import { retryWhen, delay, mergeMap } from 'rxjs/operators';

const observable = throwError('Temporary network issue');

observable.pipe(
  retryWhen(errors =>
    errors.pipe(
      mergeMap((error, index) => {
        if (index < 3) {
          console.log(`Retrying... attempt #${index + 1}`);
          return of(error).pipe(delay(1000)); // Retry after 1 second
        }
        return throwError('Retries failed'); // After 3 retries, throw error
      })
    )
  )
).subscribe({
  next: (value) => console.log(value),
  error: (err) => console.log('Error:', err),
  complete: () => console.log('Completed'),
});

আউটপুট:

Retrying... attempt #1
Retrying... attempt #2
Error: Retries failed

এখানে, retryWhen() এর মাধ্যমে ত্রুটি হওয়ার পর ১ সেকেন্ড পর পর পুনরায় চেষ্টা করা হচ্ছে এবং ৩ বার চেষ্টা করার পরেও ত্রুটি হলে তা ছুড়ে দেয়া হচ্ছে।


4. throwError() - Error সৃষ্টি করা

throwError() অপারেটরটি ব্যবহৃত হয় একটি কৃত্রিম ত্রুটি তৈরি করার জন্য, যাতে আপনি manually error throw করতে পারেন।

উদাহরণ:

import { throwError } from 'rxjs';

const error$ = throwError('An intentional error occurred');

error$.subscribe({
  next: (value) => console.log('Received:', value),
  error: (err) => console.log('Caught error:', err),
  complete: () => console.log('Completed'),
});

আউটপুট:

Caught error: An intentional error occurred

এখানে, throwError() দ্বারা একটি কৃত্রিম error তৈরি করা হয়েছে, যা subscribe এ error হ্যান্ডলিংয়ের মাধ্যমে ধরা পড়েছে।


সারাংশ

RxJS তে error handling এর জন্য catchError(), retry(), retryWhen(), এবং throwError() ব্যবহার করা হয়, যেগুলি ত্রুটি সমাধান করতে এবং অ্যাসিঙ্ক্রোনাস স্ট্রিমে ত্রুটির ঘটনা সামলাতে সহায়তা করে।

  • catchError() ত্রুটি হ্যান্ডলিংয়ের জন্য একটি fallback Observable রিটার্ন করে।
  • retry() ত্রুটির পর নির্দিষ্ট সংখ্যক বার পুনরায় চেষ্টা করে।
  • retryWhen() কাস্টম retry লজিক তৈরি করার জন্য ব্যবহার করা হয়।
  • throwError() কৃত্রিম error তৈরি করতে ব্যবহৃত হয়।

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

Content added By
Promotion

Are you sure to start over?

Loading...