RxJS-এর মাধ্যমে অ্যাসিঙ্ক্রোনাস HTTP রিকোয়েস্ট এবং ডেটা স্ট্রিম পরিচালনা করা খুবই শক্তিশালী এবং কার্যকরী। একাধিকবার HTTP রিকোয়েস্ট করতে বা ত্রুটি হ্যান্ডলিং পরিচালনা করতে retry(), retryWhen(), এবং catchError() এর মতো অপারেটর ব্যবহার করা যেতে পারে। এই অপারেটরগুলো ব্যবহার করে আপনি HTTP রিকোয়েস্টের জন্য Retry এবং Error Handling কনফিগারেশন করতে পারবেন, যাতে ত্রুটি পরিস্থিতিতে সঠিকভাবে ডেটা প্রাপ্তি নিশ্চিত করা যায় এবং অ্যাপ্লিকেশনটি আরো স্থিতিশীল হয়।
এখানে, আমরা দেখব কিভাবে RxJS ব্যবহার করে HTTP রিকোয়েস্টের জন্য Retry এবং Error Handling কনফিগারেশন করা যায়।
1. HTTP Request এর জন্য retry() অপারেটর
retry() অপারেটরটি ব্যবহৃত হয় যখন কোনো HTTP রিকোয়েস্ট ত্রুটির সম্মুখীন হয়। এটি নির্দিষ্ট সংখ্যক বার HTTP রিকোয়েস্ট পুনরায় চেষ্টা করে। যদি একটি অস্থায়ী ত্রুটি ঘটে, তবে এটি পুনরায় HTTP রিকোয়েস্ট পাঠাতে সাহায্য করে, তবে যদি পুনরায় চেষ্টা করার পরে ত্রুটি অব্যাহত থাকে, তবে এটি ত্রুটি সাবস্ক্রাইবারে পাঠায়।
উদাহরণ:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { of } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor(private http: HttpClient) {}
getData() {
return this.http.get('https://api.example.com/data').pipe(
retry(3), // ৩ বার রিকোয়েস্ট পুনরায় চেষ্টা করবে
catchError(error => {
console.error('Error occurred:', error);
return of([]); // Error হলে ফালব্যাক ডেটা দিবে
})
);
}
}
ব্যাখ্যা:
retry(3)দিয়ে HTTP রিকোয়েস্টটি ৩ বার পুনরায় চেষ্টা করা হবে যদি ত্রুটি ঘটে।- যদি ত্রুটি ৩ বার চেষ্টা করার পরও ঠিক না হয়, তবে
catchError()ফাংশনটি ত্রুটিটি ধরবে এবং ফালব্যাক ডেটা (এখানে[]) ফিরিয়ে দিবে।
2. HTTP Request এর জন্য retryWhen() অপারেটর
retryWhen() অপারেটরটি কাস্টম retry লজিক ব্যবহার করে পুনরায় চেষ্টা করার সুযোগ দেয়। আপনি এটি দিয়ে ত্রুটির উপর ভিত্তি করে একটি কাস্টম Observable প্রদান করতে পারেন, যেমন নির্দিষ্ট বিলম্বের (delay) পর পুনরায় চেষ্টা করা। এটি আরও নিয়ন্ত্রিত retry কৌশল প্রদান করতে সহায়তা করে।
উদাহরণ:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { of } from 'rxjs';
import { catchError, retryWhen, delay, take } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor(private http: HttpClient) {}
getData() {
return this.http.get('https://api.example.com/data').pipe(
retryWhen(errors =>
errors.pipe(
delay(2000), // ২ সেকেন্ড অপেক্ষা করবে
take(3) // ৩ বার পুনরায় চেষ্টা করবে
)
),
catchError(error => {
console.error('Error occurred:', error);
return of([]); // Error হলে ফালব্যাক ডেটা দিবে
})
);
}
}
ব্যাখ্যা:
- এখানে,
retryWhen()ব্যবহার করে 2 সেকেন্ড অপেক্ষা করার পর পুনরায় চেষ্টা করা হবে এবং ৩ বার retry করার পরে যদি ত্রুটি অব্যাহত থাকে, তবেcatchError()ত্রুটি হ্যান্ডল করবে এবং একটি ফালব্যাক ডেটা প্রদান করবে।
3. HTTP Request এর জন্য catchError() অপারেটর
catchError() অপারেটরটি ত্রুটি হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। এটি HTTP রিকোয়েস্টে যদি কোনো ত্রুটি ঘটে, তবে ত্রুটির পরিবর্তে একটি fallback value বা নতুন Observable রিটার্ন করতে সাহায্য করে।
উদাহরণ:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { catchError } from 'rxjs/operators';
import { of } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor(private http: HttpClient) {}
getData() {
return this.http.get('https://api.example.com/data').pipe(
catchError(error => {
console.error('Error occurred:', error);
return of([]); // Error হলে ফালব্যাক ডেটা দিবে
})
);
}
}
ব্যাখ্যা:
catchError()ত্রুটি হ্যান্ডলিং করার জন্য ব্যবহৃত হচ্ছে। যদি কোনো ত্রুটি ঘটে, তবে আমরা একটি খালি অ্যারে[]রিটার্ন করছি, যা ব্যবহারকারীকে নির্দিষ্ট একটি ডেটা ফিরিয়ে দিবে।
4. HTTP Request এর জন্য Retry and Error Handling in Combination
retry(), retryWhen(), এবং catchError() অপারেটরগুলোকে একসাথে ব্যবহার করে আপনি উন্নত retry কৌশল এবং ত্রুটি হ্যান্ডলিং কনফিগারেশন তৈরি করতে পারেন।
উদাহরণ:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { of } from 'rxjs';
import { catchError, retry, retryWhen, delay, take } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor(private http: HttpClient) {}
getData() {
return this.http.get('https://api.example.com/data').pipe(
retryWhen(errors =>
errors.pipe(
delay(2000), // ২ সেকেন্ডের বিলম্বের পর পুনরায় চেষ্টা
take(3) // ৩ বার পুনরায় চেষ্টা করবে
)
),
catchError(error => {
console.error('Error occurred:', error);
return of([]); // Error হলে ফালব্যাক ডেটা দিবে
})
);
}
}
ব্যাখ্যা:
retryWhen()ত্রুটির পর 2 সেকেন্ড অপেক্ষা করবে এবং 3 বার retry করার পরে ত্রুটি যদি অব্যাহত থাকে, তবেcatchError()ফাংশনটি ত্রুটির পরিবর্তে একটি ফালব্যাক ডেটা পাঠাবে।
সারাংশ
RxJS তে HTTP Request এর জন্য Retry এবং Error Handling কনফিগারেশন তৈরি করার জন্য কয়েকটি গুরুত্বপূর্ণ অপারেটর রয়েছে:
- retry(): HTTP রিকোয়েস্ট ত্রুটি ঘটলে পুনরায় নির্দিষ্ট সংখ্যক বার চেষ্টা করে।
- retryWhen(): কাস্টম retry লজিক প্রদান করতে সহায়তা করে, যেমন নির্দিষ্ট বিলম্ব (delay) এর পর পুনরায় চেষ্টা করা।
- catchError(): HTTP রিকোয়েস্টে ত্রুটি ঘটলে fallback value বা নতুন Observable রিটার্ন করে error হ্যান্ডলিং করতে সহায়তা করে।
এই অপারেটরগুলো ব্যবহার করে আপনি আপনার HTTP রিকোয়েস্টের প্রক্রিয়ায় আরো স্থিতিশীলতা এবং ত্রুটি হ্যান্ডলিং যুক্ত করতে পারবেন।
Read more