RxJS একটি শক্তিশালী লাইব্রেরি, যা অ্যাসিঙ্ক্রোনাস ডেটা স্ট্রিম এবং ইভেন্টগুলির উপর কার্যকরীভাবে কাজ করতে সক্ষম। startWith() এবং withLatestFrom() দুটি অপারেটর, যা ডেটা সমন্বয় বা সমন্বিতভাবে একাধিক স্ট্রিম থেকে তথ্য সংগ্রহ এবং ব্যবহারের জন্য ব্যবহৃত হয়। এগুলি বিভিন্ন স্ট্রিমের মধ্যে সম্পর্ক স্থাপন এবং ডেটার মান একত্রিত করতে সাহায্য করে। এই অপারেটরগুলি বিশেষ করে সেই পরিস্থিতিতে কার্যকর যেখানে একাধিক স্ট্রিমের ডেটা একসাথে প্রয়োজন হয়।
startWith() মেথড
startWith() অপারেটরটি ব্যবহৃত হয় যখন আপনি একটি Observable থেকে ডেটা স্ট্রিম প্রাপ্তির আগে একটি ডিফল্ট মান বা শুরু মান (initial value) প্রদান করতে চান। এটি মূলত ডেটার আগেই নির্দিষ্ট একটি মান পাঠানোর জন্য ব্যবহৃত হয়, যাতে সাবস্ক্রিপশন শুরু হওয়ার আগে সেটি উপলব্ধ হয়।
startWith() এর বৈশিষ্ট্য:
- স্ট্রিমের আগে একটি মান প্রদান করা: এটা মূল স্ট্রিমের আগেই ডিফল্ট মান প্রেরণ করে, যাতে আপনি শুরুতে কিছু মান পেতে পারেন।
- অ্যাসিঙ্ক্রোনাস স্ট্রিমের আগে একটি প্রাথমিক মান: এটি বিশেষভাবে ব্যবহারী যখন ডেটা স্ট্রিমটি পরে আসবে এবং আগে কোনো মান প্রয়োজন হবে।
উদাহরণ:
import { of } from 'rxjs';
import { startWith } from 'rxjs/operators';
const observable = of(2, 3, 4).pipe(
startWith(1) // স্ট্রিম শুরু হওয়ার আগে ১ পাঠানো হবে
);
observable.subscribe(console.log);
এখানে, startWith(1) অপারেটরটি ব্যবহার করে Observable ১ মান পাঠাবে, তারপর ২, ৩, ৪ মানগুলি পাঠানো হবে। আউটপুট হবে:
1
2
3
4
withLatestFrom() মেথড
withLatestFrom() অপারেটরটি একটি রিয়্যাক্টিভ ডেটা সমন্বয়ের জন্য ব্যবহৃত হয়, যেখানে এটি দুটি Observable এর মধ্যে ডেটা সম্পর্ক স্থাপন করতে সাহায্য করে। এটি মূলত প্রথম Observable থেকে ডেটা গ্রহণ করে এবং তারপরে দ্বিতীয় Observable এর সর্বশেষ মান গ্রহণ করে। এটি বিশেষভাবে তখন ব্যবহার করা হয় যখন একাধিক স্ট্রিম থেকে সর্বশেষ মানগুলির সাথে কাজ করা প্রয়োজন।
withLatestFrom() এর বৈশিষ্ট্য:
- একাধিক স্ট্রিমের সাথে সম্পর্ক স্থাপন: এটি প্রথম Observable এর প্রতিটি মানের সাথে দ্বিতীয় Observable এর সর্বশেষ মান সংযুক্ত করে।
- ডেটার সমন্বয়: একাধিক Observable এর মানগুলির মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে, যেখানে একটি স্ট্রিমের মান অন্যটির সাথে সম্পর্কিত হয়।
উদাহরণ:
import { interval } from 'rxjs';
import { map, withLatestFrom } from 'rxjs/operators';
const observable1 = interval(1000); // প্রতি সেকেন্ডে একটি মান
const observable2 = interval(1500); // প্রতি ১.৫ সেকেন্ডে একটি মান
observable1.pipe(
withLatestFrom(observable2) // observable2 থেকে সর্বশেষ মান গ্রহণ করবে
).subscribe(([val1, val2]) => {
console.log(`observable1: ${val1}, observable2: ${val2}`);
});
এখানে, observable1 প্রতি সেকেন্ডে একটি নতুন মান তৈরি করছে এবং observable2 প্রতি ১.৫ সেকেন্ডে একটি মান তৈরি করছে। withLatestFrom() ব্যবহার করে observable1 থেকে প্রতিটি মানের সাথে observable2 এর সর্বশেষ মান যুক্ত করা হচ্ছে।
আউটপুট (প্রথম ৫টি):
observable1: 0, observable2: 0
observable1: 1, observable2: 1
observable1: 2, observable2: 1
observable1: 3, observable2: 2
observable1: 4, observable2: 2
এখানে দেখা যাচ্ছে, observable1 এর মান প্রতি সেকেন্ডে পরিবর্তিত হলেও, observable2 থেকে সর্বশেষ মানটি সবসময় যুক্ত হচ্ছে।
startWith() এবং withLatestFrom() এর সমন্বয়
আপনি যদি startWith() এবং withLatestFrom() মেথড দুটি একসাথে ব্যবহার করতে চান, তখন আপনি প্রথম Observable থেকে একটি ডিফল্ট মান গ্রহণ করতে পারেন এবং পরবর্তী Observable থেকে সর্বশেষ মান নেওয়ার মাধ্যমে তাদের সমন্বয় করতে পারবেন।
উদাহরণ:
import { interval, of } from 'rxjs';
import { startWith, withLatestFrom, map } from 'rxjs/operators';
const observable1 = interval(1000); // প্রতি সেকেন্ডে একটি মান
const observable2 = of('A', 'B', 'C'); // একটি সিঙ্ক্রোনাস স্ট্রিম
observable1.pipe(
startWith(0), // স্ট্রিমের আগে ০ পাঠাবে
withLatestFrom(observable2) // observable2 থেকে সর্বশেষ মান গ্রহণ করবে
).subscribe(([val1, val2]) => {
console.log(`observable1: ${val1}, observable2: ${val2}`);
});
এখানে, observable1 এর সেকেন্ডে একটি নতুন মান তৈরি হচ্ছে এবং observable2 সিঙ্ক্রোনাসভাবে কিছু মান প্রদান করছে। প্রথমে observable1 এর আগে startWith(0) ব্যবহার করে 0 পাঠানো হচ্ছে এবং পরে observable2 থেকে সর্বশেষ মান নেয়া হচ্ছে।
আউটপুট হবে:
observable1: 0, observable2: A
observable1: 1, observable2: B
observable1: 2, observable2: C
সারাংশ
- startWith(): এটি একটি প্রাথমিক মান প্রদান করতে ব্যবহৃত হয় যা একটি Observable স্ট্রিমের আগে পাঠানো হয়। এটি অ্যাসিঙ্ক্রোনাস স্ট্রিমে আগে কিছু মান বা স্টেট পাঠানোর জন্য উপযোগী।
- withLatestFrom(): এটি দুটি Observable এর ডেটা সমন্বয় করার জন্য ব্যবহৃত হয়, যেখানে একটি Observable এর মানের সাথে অপর Observable এর সর্বশেষ মান যুক্ত করা হয়।
এগুলি একসাথে ব্যবহার করলে আপনি একাধিক স্ট্রিমের ডেটার মধ্যে সম্পর্ক স্থাপন এবং তাদের সংমিশ্রণ করতে পারবেন।
Read more