অপারেটর থেকে 'বনাম' এর


153

শুধুমাত্র মধ্যে পার্থক্য আছে কি Observable.ofএবং Observable.fromআর্গুমেন্ট বিন্যাস? Function.prototype.callএবং মত Function.prototype.apply?

Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})

উত্তর:


115

বেশ না। কোনও অ্যারে পাস করার সময় Observable.from, এটির মধ্যে একমাত্র পার্থক্য এবং Observable.ofআর্গুমেন্টগুলি যেভাবে পাস হয়।

যাইহোক, যে Observable.fromএকটি যুক্তি গ্রহণ করবে

সাবস্ক্রাইবযোগ্য অবজেক্ট, একটি প্রতিশ্রুতি, একটি পর্যবেক্ষণযোগ্য-মতো, একটি অ্যারে, একটি পুনরাবৃত্তিযোগ্য বা অ্যারের মতো অবজেক্টটি রূপান্তরিত হতে হবে

এর জন্য কোনও অনুরূপ আচরণ নেই Observable.of- যা সর্বদা কেবল মানগুলি গ্রহণ করে এবং কোনও রূপান্তর সম্পাদন করে না।


193

অ্যারের মতো কাঠামো (স্ট্রিং সহ) পাস করার সময় ofএবং এর মধ্যে পার্থক্যটি নোট করা গুরুত্বপূর্ণ from:

Observable.of([1, 2, 3]).subscribe(x => console.log(x));

একবারে পুরো অ্যারে মুদ্রণ করবে।

অন্য দিকে,

Observable.from([1, 2, 3]).subscribe(x => console.log(x));

1 দ্বারা 1 দ্বারা উপাদানগুলি মুদ্রণ করে।

স্ট্রিংগুলির জন্য আচরণটি একই, তবে চরিত্রের স্তরে।


যদি পর্যবেক্ষণযোগ্য.ফ (1, 2, 3)। সাবস্ক্রাইব (x => কনসোল.লগ (এক্স)) কী হবে;
জিয়াওকে

1
@ জিয়াউক তারপর অবশ্যই এটি 3 পৃথক নির্গমন (1, তারপরে 2, তারপরে 3)।
Tsvetan Ovedenski

16

আর একটি আকর্ষণীয় তথ্য হ'ল অবজারভেবল.এফ ([]) এ সাবস্ক্রাইব করার সময় খালি অ্যারে হবে। যেখানে আপনি পর্যবেক্ষণযোগ্য.ফর্ম ([]) এ সাবস্ক্রাইব করলে আপনি কোনও মান পাবেন না।

আপনি যখন সুইচম্যাপের সাথে একটানা অপারেশন করেন এটি গুরুত্বপূর্ণ।

প্রাক্তন: নীচের উদাহরণে, আমি একটি কাজ এবং তারপরে সাইটগুলি সংরক্ষণ করছি এবং তারপরে একটি স্ট্রিম হিসাবে মন্তব্য করব।

.do((data) => {
            this.jobService.save$.next(this.job.id);
        })
        .switchMap(() => this.jobService.addSites(this.job.id, this.sites)
            .flatMap((data) => {
                if (data.length > 0) {
                    // get observables for saving
                    return Observable.forkJoin(jobSiteObservables);
                } else {
                    **return Observable.of([]);**
                }
            })).do((result) => {
            // ..
        })
        .switchMap(() => this.saveComments())
....

যদি সংরক্ষণের জন্য কোনও সাইট না থাকে, অর্থাত্; অ্যাডসাইট বিভাগে ডেটা দৈর্ঘ্য = 0, উপরের কোডটি পর্যবেক্ষণযোগ্য.ফ ([]) ফিরিয়ে দিচ্ছে এবং তারপরে মন্তব্যগুলি সংরক্ষণ করতে যায়। তবে আপনি যদি এটি পর্যবেক্ষণযোগ্য.ফর্ম ([]) দিয়ে প্রতিস্থাপন করেন তবে উত্তরোত্তর পদ্ধতিগুলি কল হবে না।

rxfiddle


6

এক লাইনের পার্থক্য:

       let fruits = ['orange','apple','banana']

থেকে : অ্যারে একের পর এক আইটেমগুলি প্রেরণ করুন। উদাহরণ স্বরূপ

    from(fruits).subscribe(console.log) // 'orange','apple','banana'

এর : একবারে পুরো অ্যারেটি প্রেরণ করুন। উদাহরণ স্বরূপ

 of(fruits).subscribe(console.log) //  ['orange','apple','banana']

উল্লেখ্য: এর অপারেটর হিসাবে আচরণ করতে থেকে সঙ্গে অপারেটর বিস্তার অপারেটর

 of(...fruits).subscribe(console.log) //  'orange','apple','banana'

3
  1. খণ্ডগুলিতে রিটার্ন বিজ্ঞপ্তি থেকে এক এক করে। যেমন: ("abcde") থেকে a => b => c => d => ই ফিরে আসবে
  2. রিটার্ন সম্পূর্ণ বিজ্ঞপ্তি। উদাহরণস্বরূপ: এর ("abcde") abcde ফিরিয়ে দেবে।

https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100


0

from: অ্যারে, প্রতিশ্রুতি বা পুনরাবৃত্তযোগ্য থেকে পর্যবেক্ষণযোগ্য তৈরি করুন। একমাত্র মান নেয়। অ্যারে, পুনরাবৃত্ত এবং স্ট্রিংগুলির জন্য, সমস্ত অন্তর্ভুক্ত মানগুলি ক্রম হিসাবে নির্গত হবে

const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3

of: মানের পরিবর্তনশীল পরিমাণের সাথে পর্যবেক্ষণযোগ্য তৈরি করুন, ক্রমানুসারে মানগুলি নির্গত করুন তবে একক মান হিসাবে অ্যারেগুলি

const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.