take(), takeUntil(), এবং takeWhile() Operators

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

248

RxJS এর take(), takeUntil(), এবং takeWhile() অপারেটরগুলো এমন অপারেটর যা Observable স্ট্রিম থেকে নির্দিষ্ট সংখ্যক বা শর্তভিত্তিক মান গ্রহণ করতে ব্যবহৃত হয়। এগুলি প্রধানত "terminate early" করার জন্য ব্যবহৃত হয়, অর্থাৎ আমরা যখন চাই, তখন ডেটা স্ট্রিম থেকে কিছু মান গ্রহণ করতে থামিয়ে দিতে পারি। প্রতিটি অপারেটরের কার্যকারিতা কিছুটা আলাদা এবং ব্যবহারিক ক্ষেত্রে তাদের ভূমিকা উল্লেখযোগ্য।


take() Operator

take() অপারেটরটি Observable থেকে প্রথম N সংখ্যক মান গ্রহণ করে। এটি সেই মানগুলো সাবস্ক্রাইব করার পর স্ট্রিমটি বন্ধ করে দেয়।

বৈশিষ্ট্য:

  • first N items: এই অপারেটরটি নির্দিষ্ট সংখ্যক (N) মান স্ট্রিম থেকে গ্রহণ করবে।
  • complete immediately: যখন N সংখ্যক মান গ্রহণ করা হয়, তখন complete() কল হয়ে যায় এবং স্ট্রিম বন্ধ হয়ে যায়।

উদাহরণ:

import { of } from 'rxjs';
import { take } from 'rxjs/operators';

const observable = of(1, 2, 3, 4, 5);

observable.pipe(
  take(3) // প্রথম ৩টি মান গ্রহণ করা হবে
).subscribe(console.log);

আউটপুট:

1
2
3

এখানে, take(3) ব্যবহার করে প্রথম তিনটি মান গ্রহণ করা হয়েছে, এবং এর পর আর কোনো মান গ্রহণ করা হয়নি।


takeUntil() Operator

takeUntil() অপারেটরটি যখন পর্যন্ত একটি নির্দিষ্ট observable মান প্রেরণ করে, তখন পর্যন্ত মূল Observable থেকে ডেটা গ্রহণ করতে সাহায্য করে। এটি একটি "triggering observable" ব্যবহার করে, যা একটি শর্ত পূর্ণ হলে স্ট্রিম বন্ধ করে দেয়।

বৈশিষ্ট্য:

  • condition based: একটি নির্দিষ্ট condition এর উপর ভিত্তি করে Observable বন্ধ হয়ে যায়।
  • observable-based termination: একটি অন্য Observable, যা ট্রিগার হিসেবে কাজ করে, সেটি যখন শেষ হবে তখন takeUntil() স্ট্রিম থেকে ডেটা নেওয়া থামিয়ে দেবে।

উদাহরণ:

import { of, interval } from 'rxjs';
import { takeUntil } from 'rxjs/operators';

const source = interval(1000); // 1 সেকেন্ডে একটি মান দিবে
const notifier = of('stop'); // একটি স্টপ সিগন্যাল

source.pipe(
  takeUntil(notifier) // notifier মানটি আসলে, takeUntil কার্যকর হবে
).subscribe(console.log);

আউটপুট:

0
1
2
3
...

এখানে, takeUntil(notifier) স্ট্রিম থেকে ডেটা গ্রহণ করতে থাকবে যতক্ষণ না notifier মান প্রেরণ করে। যেহেতু notifier একটি সহজ Observable যা কেবল একবার stop মান দেয়, এটি takeUntil() স্ট্রিম বন্ধ করতে সাহায্য করে।


takeWhile() Operator

takeWhile() অপারেটরটি একটি শর্তের ওপর ভিত্তি করে Observable থেকে মান গ্রহণ করে। এটি শুধুমাত্র তখনই মান গ্রহণ করবে যখন একটি নির্দিষ্ট শর্ত true থাকবে। যখন শর্তটি মিথ্যা হয়, তখন Observable বন্ধ হয়ে যায়।

বৈশিষ্ট্য:

  • condition-based filtering: এটি একাধিক মান নির্বাচন করতে ব্যবহৃত হয় যেগুলি শর্ত অনুযায়ী সঠিক।
  • terminate on false condition: যখন শর্তটি মিথ্যা হয়, তখন ডেটা গ্রহণ বন্ধ হয়ে যায় এবং স্ট্রিমটি শেষ হয়ে যায়।

উদাহরণ:

import { of } from 'rxjs';
import { takeWhile } from 'rxjs/operators';

const observable = of(1, 2, 3, 4, 5);

observable.pipe(
  takeWhile(x => x < 4) // যতক্ষণ x < 4 হবে, ততক্ষণ মান গ্রহণ করবে
).subscribe(console.log);

আউটপুট:

1
2
3

এখানে, takeWhile(x => x < 4) শর্ত অনুযায়ী মান গ্রহণ করেছে যতক্ষণ না x < 4 ছিল। যখন 4 এসেছিল, তখন এটি স্ট্রিম বন্ধ করে দেয়।


take(), takeUntil(), এবং takeWhile() এর মধ্যে পার্থক্য

অপারেটরবর্ণনাব্যবহার
take()নির্দিষ্ট সংখ্যক মান গ্রহণ করে এবং অবশিষ্ট স্ট্রিম বন্ধ করে দেয়।যখন আপনি একটি নির্দিষ্ট সংখ্যা মান গ্রহণ করতে চান এবং তারপর স্ট্রিম বন্ধ করতে চান।
takeUntil()একটি নির্দিষ্ট Observable (trigger) এর দ্বারা ট্রিগার করা হলে ডেটা গ্রহণ বন্ধ করে দেয়।যখন একটি অন্য Observable বা শর্ত অনুসারে মূল Observable থেকে মান গ্রহণ থামাতে চান।
takeWhile()একটি শর্তের ভিত্তিতে মান গ্রহণ করে যতক্ষণ না শর্তটি মিথ্যা হয়।যখন আপনি একটি শর্ত অনুযায়ী ডেটা ফিল্টার করতে চান এবং শর্ত মিথ্যা হলে স্ট্রিম বন্ধ করতে চান।

সারাংশ

  • take() প্রথম N সংখ্যক মান গ্রহণ করে এবং তারপর Observable বন্ধ করে দেয়।
  • takeUntil() একটি অন্য Observable এর মানের উপর ভিত্তি করে ডেটা গ্রহণ বন্ধ করে দেয়।
  • takeWhile() একটি শর্ত অনুযায়ী ডেটা গ্রহণ করে যতক্ষণ না শর্তটি মিথ্যা হয়।

এই তিনটি অপারেটরই খুবই কার্যকরী যখন আপনি ডেটা স্ট্রিম থেকে নির্দিষ্ট পরিমাণ বা শর্তভিত্তিক মান গ্রহণ করতে চান এবং তা সম্পূর্ণ করার পর স্ট্রিম বন্ধ করতে চান।

Content added By
Promotion

Are you sure to start over?

Loading...