প্রতিশ্রুতি এবং পর্যবেক্ষণের মধ্যে পার্থক্য কি?


1395

কৌণিক Promiseএবং এর Observableমধ্যে পার্থক্য কি ?

প্রতিটি ক্ষেত্রে একটি উদাহরণ উভয় ক্ষেত্রে বুঝতে সহায়তা করবে। কোন পরিস্থিতিতে আমরা প্রতিটি কেস ব্যবহার করতে পারি?


23
আমি আপনাকে এই পোস্টটি পড়ার পরামর্শ দিচ্ছি; Angular2 প্রতিশ্রুতি বনাম পর্যবেক্ষণযোগ্য
erolkaya84


3
এই প্রশ্নোত্তর পড়তে যে কারও কাছে - একজন রক্ষণাবেক্ষণকারী, স্পিকার এবং দীর্ঘকালীন ব্যবহারকারী পিওভি থেকে দু'দেশেই জড়িত এমন একজন হিসাবে আমি আপনাকে প্রতিশ্রুতিগুলিতে অফিসিয়াল আরএক্সজেএস ডক্স এবং এমডিএন ডকুমেন্টেশন পড়তে উত্সাহিত করি। আমি ব্যক্তিগতভাবে এখানে উত্তরগুলি পুরোপুরি বিভ্রান্তিমূলক এবং ভুলকে পেয়েছি এবং বিশ্বাস করি যে তারা সাহায্য করার চেষ্টা করছে এমন লোকদের ভাল উদ্দেশ্য নিয়ে, খুব ক্ষতিকারক।
বেনিয়ামিন গ্রুইনবাউম

1
আমি আপনাকে এই কৌনিক অফিসিয়াল ডকুমেন্টটি কৌনিক.ও
গুইড

আর এ কারণেই লিঙ্কগুলি উত্তর হিসাবে অগ্রহণযোগ্য বলে বিবেচিত হয়।
ডেভ

উত্তর:


1547

প্রতিশ্রুতি

একটি Promiseএকটি পরিচালনা একক ঘটনা যখন একটি ASYNC অপারেশন সম্পন্ন হয়ে বা ব্যর্থ।

দ্রষ্টব্য: সেখানে Promiseলাইব্রেরি রয়েছে যা বাতিলকরণ সমর্থন করে, তবে ES6 Promiseএখনও পর্যন্ত হয় না।

লক্ষণীয়

আন Observableএকটি Stream(অনেক ভাষায়) এর মতো এবং শূন্য বা আরও বেশি ইভেন্টগুলিতে পাস করার অনুমতি দেয় যেখানে প্রতিটি ইভেন্টের জন্য কলব্যাক বলা হয়।

প্রায়শই Observableবেশি পছন্দ করা হয় Promiseকারণ এটি Promiseআরও অনেক কিছু বৈশিষ্ট্য সরবরাহ করে । আপনি Observable0, 1 বা একাধিক ইভেন্ট হ্যান্ডেল করতে চান তা বিবেচ্য নয়। আপনি প্রতিটি ক্ষেত্রে একই এপিআই ব্যবহার করতে পারেন।

Observableএছাড়াও উপর সুবিধা আছে Promiseহতে cancelable । একটি সার্ভার অথবা অন্য কোনো দামী ASYNC অপারেশন একটি HTTP অনুরোধের ফলাফলের আর প্রয়োজন না হয়, তাহলে Subscriptionএকটি এর Observableসময়, সদস্যতা বাতিল করতে পারবেন Promiseএমনকি যখন আপনি প্রজ্ঞাপন প্রয়োজন হবে না অবশেষে সাফল্য বা ব্যর্থ কলব্যাক ডাকব বা ফলাফল এটি আর সরবরাহ করে।

লক্ষণীয় প্রদান করে অপারেটরদের মত map, forEach, reduce, ... একটি অ্যারের অনুরূপ

এখানে শক্তিশালী অপারেটরগুলি retry()বা replay(), ... যা প্রায়শই বেশ কার্যকর।


180
তাহলে কি একক কলব্যাক ক্ষেত্রে অবজারভেবলের পরিবর্তে প্রতিশ্রুতি ব্যবহার করার কোনও উপযুক্ত কারণ আছে বা তারা যেভাবে সেভাবে কাজ করতে পারে সেহেতু সেখানে অবজারভেলগুলিও ব্যবহার করা উচিত? মূলত, "সমস্ত জিনিস পর্যবেক্ষণযোগ্য" করা কি ভাল অনুশীলন বা প্রতিশ্রুতিটির এখনও এর কোনও জায়গা আছে?
জোশ ওয়ার্টস

75
আপনি যদি প্রতিক্রিয়াশীল স্টাইলটি ব্যবহার করতে চান তবে সর্বত্র নিরীক্ষণযোগ্য ব্যবহার করুন। আপনার যদি পর্যবেক্ষণযোগ্য কেবল থাকে তবে আপনি সহজেই রচনা করতে পারেন। আপনি যদি তাদের মিশ্রণ করেন তবে এটি আর পরিষ্কার নয়। যদি আপনি প্রতিক্রিয়াশীল স্টাইল সম্পর্কে চিন্তা না করেন তবে আপনি এমন একক ইভেন্টের জন্য প্রতিশ্রুতিটি ব্যবহার করতে পারেন যেখানে আপনি ইভেন্টের স্ট্রিমের জন্য বাতিল এবং পর্যবেক্ষণযোগ্য সম্পর্কে চিন্তা করবেন না।
গন্টার জ্যাচবাউর

35
@ গন্তেরজ্যাচবাউয়ার আরে - আমার পর্যবেক্ষণযোগ্য বা কার্যকরী প্রোগ্রামিংয়ের বিরুদ্ধে কোনও যুক্তি নেই। আমি কেবল উল্লেখ করছি যে আমি বিশ্বাস করি যে এনজি 2-তে HTTP এর মাধ্যমে পর্যবেক্ষণকারীরা দৌড়াদৌড়ি করার লোকেরা কল করার প্রতিশ্রুতিগুলির উপর পর্যবেক্ষণযোগ্যদের ব্যবহার করার কোনও বাস্তব কারণ নেই। প্রতিশ্রুতি ব্যবহার করে তারা ব্যবহারিক কিছুই হারাবে না। ডেবিউন এবং পুনরায় চেষ্টা অপারেটরগুলি অপ্রাসঙ্গিক - আপনি এনজি-ডাবনস দিয়ে ডাবনও করতে পারেন এবং যদি কোনও কল ব্যর্থ হওয়ার প্রত্যাশা হয়, সাধারণত, কোডটিতে সমস্যা রয়েছে। এইচভিটি-র জন্য অস্থির তৃতীয় পক্ষের API গুলি জিজ্ঞাসা করার সময় কলগুলির পুনরায় চেষ্টা করার সাথে আমার কেবল একবার কাজ করার দরকার ছিল।
ভিএসও

92
তবে দয়া করে ভুলে যাবেন না Promise, পাশাপাশি async/ awaitআপনার কোডটিকে আবার সমতল করে তোলে! বেশিরভাগ পরিস্থিতিতে, এবং প্রকল্পগুলিতে যা রকেট বিজ্ঞানের সাথে কাজ করে না, অযথা জটিল পদ্ধতির জটিল চেইনগুলি সহ সেই ভয়ঙ্কর নেস্টেড ফাংশনগুলি লেখার দরকার নেই। আপনি ট্রান্সফারারগুলির সাথে async/ awaitআজকে ব্যবহার করতে পারেন , পছন্দ করতে TypeScriptএবং কোনও rxjsবয়লারপ্লেট ছাড়াই প্রকৃত মানব-পঠনযোগ্য ফ্ল্যাট কোড লিখতে পারেন । আপনার সম্ভবত এখনও rxjsনির্বাচিত পরিস্থিতিতে কখনও কখনও প্রয়োজন হবে , কারণ এতে সত্যিকার অর্থে প্রচুর পরিমাণে অফার করা থাকে।
দুষ্টকোস

15
এই উত্তরটি বিভ্রান্তিকর হয়, একটি লক্ষণীয় হয় না একটি স্ট্রিম একটি মত হল মত ফাংশন যা একটি স্ট্রিম ফেরৎ
বেনিয়ামিন গ্রুইনবাউম

333

উভয়ই Promisesএবং Observablesআমাদের বিমূর্ততা সরবরাহ করে যা আমাদের অ্যাপ্লিকেশনগুলির অ্যাসিনক্রোনাস প্রকৃতির মোকাবেলায় সহায়তা করে । তাদের মধ্যে পার্থক্যটি পরিষ্কার করা হয়েছে @ জন্টার এবং @ রেলু দ্বারা।

যেহেতু একটি কোড স্নিপেট এক হাজার শব্দের মূল্যবান, তাই এগুলি আরও সহজে বোঝার জন্য নীচের উদাহরণটি দিয়ে যান।

অসাধারণ নিবন্ধের জন্য @ ক্রিসটফ বার্গডর্ফকে ধন্যবাদ


কৌণিক এইচটিটিপি নিয়ে কাজ করার প্রতিশ্রুতির পরিবর্তে আরএক্স.জেস অবজারভেবল ব্যবহার করে।

মনে করুন যে আপনি একটি অনুসন্ধান ফাংশন তৈরি করছেন যা আপনার টাইপ করার সাথে সাথে আপনাকে ফলাফলগুলি প্রদর্শন করবে। পরিচিত মনে হচ্ছে তবে সেই কাজটি নিয়ে প্রচুর চ্যালেঞ্জ রয়েছে।

  • আমরা যতবারই কোনও কী চাপলে সার্ভারের শেষ পয়েন্টটি আঘাত করতে চাই না, এটির HTTPঅনুরোধের ঝড় দিয়ে তাদের প্লাবিত করা উচিত । মূলত, ব্যবহারকারীরা প্রতিটি কীস্ট্রোকের পরিবর্তে টাইপ করা বন্ধ করে দিলে আমরা কেবল এটি আঘাত করতে চাই।
  • পরবর্তী অনুরোধগুলির জন্য একই ক্যোয়ারী প্যারামগুলির সাথে অনুসন্ধানের শেষ পয়েন্টটি আঘাত করবেন না ।
  • আদেশের বাইরে থাকা প্রতিক্রিয়াগুলির সাথে ডিল করুন। যখন একই সাথে আমাদের একাধিক অনুরোধগুলি বিমানের মধ্যে থাকে তখন আমাদের অবশ্যই তাদের কেসগুলির জন্য অ্যাকাউন্ট করতে হবে যেখানে তারা অপ্রত্যাশিত ক্রমে ফিরে আসে। ভাবুন আমরা প্রথমে কম্পিউটার টাইপ করি , থামি, একটি অনুরোধ চলে যায়, আমরা গাড়ি টাইপ করি , থামি, একটি অনুরোধ বের হয়ে যায়। এখন আমাদের দুটি ফ্লাইট ইন-ফ্লাইট রয়েছে। দুর্ভাগ্যক্রমে, কম্পিউটারের জন্য ফলাফল বহন করার অনুরোধটি সেই অনুরোধের পরে ফিরে আসে যা গাড়ীর জন্য ফলাফল বহন করে ।

ডেমোটিতে কেবল দুটি ফাইল থাকে: app.tsএবং wikipedia-service.ts। একটি বাস্তব বিশ্বের দৃশ্যে, যদিও আমরা সম্ভবত জিনিসগুলি আরও বিভক্ত করব।


নীচে প্রতিশ্রুতি ভিত্তিক বাস্তবায়ন যা বর্ণিত প্রান্তের কেসগুলির কোনওটিই পরিচালনা করে না।

wikipedia-service.ts

import { Injectable } from '@angular/core';
import { URLSearchParams, Jsonp } from '@angular/http';

@Injectable()
export class WikipediaService {
  constructor(private jsonp: Jsonp) {}

  search (term: string) {
    var search = new URLSearchParams()
    search.set('action', 'opensearch');
    search.set('search', term);
    search.set('format', 'json');
    return this.jsonp
                .get('http://en.wikipedia.org/w/api.php?callback=JSONP_CALLBACK', { search })
                .toPromise()
                .then((response) => response.json()[1]);
  }
}

প্রদত্ত অনুসন্ধানের শব্দটি দিয়ে আমরা উইকিপিডিয়া এপিআইয়ের বিরুদ্ধে Jsonpএকটি GETঅনুরোধ করার জন্য পরিষেবাটি ইনজেকশন দিচ্ছি । লক্ষ করুন যে, আমরা কল অর্ডারে একটি থেকে পেতে একটি থেকে । শেষ পর্যন্ত আমাদের অনুসন্ধান পদ্ধতির রিটার্ন টাইপ হিসাবে শেষ করুন ।toPromiseObservable<Response>Promise<Response>Promise<Array<string>>

app.ts

// check the plnkr for the full list of imports
import {...} from '...';

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Wikipedia Search</h2>
      <input #term type="text" (keyup)="search(term.value)">
      <ul>
        <li *ngFor="let item of items">{{item}}</li>
      </ul>
    </div>
  `
})
export class AppComponent {
  items: Array<string>;

  constructor(private wikipediaService: WikipediaService) {}

  search(term) {
    this.wikipediaService.search(term)
                         .then(items => this.items = items);
  }
}

এখানে খুব একটা আশ্চর্যের কিছু নেই। আমরা আমাদের ইনজেক্ট করি WikipediaServiceএবং এটির কার্যকারিতাটি অনুসন্ধান পদ্ধতির মাধ্যমে টেমপ্লেটে প্রকাশ করি। টেমপ্লেটটি কেবল কীআপ এবং কলগুলিতে আবদ্ধ হয় search(term.value)

আমরা উইকিপিডিয়া সার্ভিসের অনুসন্ধান পদ্ধতিটি প্রত্যাবর্তনের প্রতিশ্রুতিটির ফলাফলটি আনল্যাপ্ট করি এবং এটি টেমপ্লেটে একটি সরল সারণী হিসাবে প্রকাশ করি যাতে আমরা *ngForএটির মধ্য দিয়ে লুপ পেতে পারি এবং আমাদের জন্য একটি তালিকা তৈরি করতে পারি।

প্লামকারে প্রতিশ্রুতি ভিত্তিক বাস্তবায়নের উদাহরণ দেখুন


যেখানে পর্যবেক্ষণগুলি সত্যই জ্বলজ্বল করে

আসুন প্রতিটি কোডস্ট্রোক দিয়ে শেষ পয়েন্টটি হাতুড়ি না করে আমাদের কোডটি পরিবর্তন করুন তবে ব্যবহারকারী কেবল ৪০০ এমএসের জন্য টাইপ করা বন্ধ করলে কেবল একটি অনুরোধ প্রেরণ করুন

এ জাতীয় সুপার পাওয়ার উন্মোচন করতে আমাদের প্রথমে এমন একটি Observable<string>অনুসন্ধানের শব্দটি প্রস্তুত করা উচিত যা ব্যবহারকারীর টাইপ করে formControl। এই নির্দেশিকাটি ব্যবহার করতে, আমাদের প্রথমে ReactiveFormsModuleআমাদের অ্যাপ্লিকেশন মডিউলটিতে আমদানি করা দরকার ।

app.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { JsonpModule } from '@angular/http';
import { ReactiveFormsModule } from '@angular/forms';

@NgModule({
  imports: [BrowserModule, JsonpModule, ReactiveFormsModule]
  declarations: [AppComponent],
  bootstrap: [AppComponent]
})
export class AppModule {}

একবার আমদানি হয়ে গেলে, আমরা আমাদের টেম্পলেট থেকে ফর্মকন্ট্রোল ব্যবহার করতে পারি এবং এটি "টার্ম" নামটিতে সেট করতে পারি।

<input type="text" [formControl]="term"/>

আমাদের উপাদান, আমরা একটি দৃষ্টান্ত তৈরি FormControlথেকে @angular/formএবং আমাদের উপাদান নাম মেয়াদ অধীনে একটি ক্ষেত্র যেমন এক্সপোজ।

পর্দার আড়ালে, শব্দটি স্বয়ংক্রিয়ভাবে এমন একটি Observable<string>সম্পত্তি হিসাবে প্রকাশ করে valueChangesযা আমরা সাবস্ক্রাইব করতে পারি। এখন যে আমাদের আছে Observable<string>, ব্যবহারকারীর ইনপুট অতিক্রম debounceTime(400)করা আমাদের কাছে কল করার মতোই সহজ Observable। এটি এমন একটি নতুন ফেরত Observable<string>দেবে যা কেবলমাত্র 400 মাইলের জন্য নতুন মান না আসায় একটি নতুন মান নির্গত হয়।

export class App {
  items: Array<string>;
  term = new FormControl();
  constructor(private wikipediaService: WikipediaService) {
    this.term.valueChanges
              .debounceTime(400)        // wait for 400ms pause in events
              .distinctUntilChanged()   // ignore if next search term is same as previous
              .subscribe(term => this.wikipediaService.search(term).then(items => this.items = items));
  }
}

আমাদের অ্যাপ্লিকেশন ইতিমধ্যে ফলাফলগুলি দেখায় এমন অনুসন্ধান শব্দটির জন্য অন্য একটি অনুরোধ প্রেরণ করা সম্পদের অপচয় হবে। কাঙ্ক্ষিত আচরণ অর্জনের জন্য আমাদের যা করতে হবে তা হ'ল distinctUntilChangedআমাদের ডেকে যাওয়ার পরে অপারেটরকে কল করাdebounceTime(400)

প্লাঙ্কারে পর্যবেক্ষণযোগ্য প্রয়োগের উদাহরণ দেখুন

আউট-অফ-অর্ডার প্রতিক্রিয়া সঙ্গে তার আচরণ জন্য, পূর্ণ নিবন্ধ চেক করুন http://blog.thoughtram.io/angular/2016/01/06/taking-advantage-of-observables-in-angular2.html

অ্যাংুলারে আমি যতদূর এইচটিটিপি ব্যবহার করছি, আমি সম্মত হলাম যে সাধারণ ব্যবহারের ক্ষেত্রে ওভারসামেভার ওভার প্রতিশ্রুতি দেওয়ার সময় খুব বেশি পার্থক্য নেই। সুবিধার কোনওটিই এখানে বাস্তবে প্রাসঙ্গিক নয়। আশা করি ভবিষ্যতে কিছু উন্নত ব্যবহারের ঘটনাটি দেখতে পাবো :)


আরও জানুন


31
আমি এইচটিপিপি পরিষেবাটি পর্যবেক্ষণ ভিত্তিক ভিত্তিতে পরিণত করার সিদ্ধান্তটি পুরোপুরি ক্রয় করি না। আমি যে শুনি তার প্রতিটি ব্যাখ্যা একই উদাহরণের উপর নির্ভর করে: শব্দ অনুসারে অনুসন্ধান করা। তবে এটি ব্রাউজার ইভেন্টগুলি পরিচালনা করার বিষয়ে। অ্যাসিক্রোনাস http অনুরোধগুলির সাথে ডিল করার সময় এটি প্রয়োগে কী সুবিধা হয় তা আমি শুনতে চাই।
অ্যালেক্স পোলান

1
মিশ্র নিদর্শন এড়াতে সিদ্ধান্তটি কি দুর্ঘটনাক্রমে হয়েছিল?
অ্যালেক্স পোলান

6
@ অ্যালেক্সপোলান, বেন লেশের সাথে এই পোডকাস্টটিতে একটি পর্যবেক্ষণযোগ্য ফিরিয়ে দেওয়া HTTP পরিষেবাটির সুবিধার জন্য আসলে একটি ভাল ব্যাখ্যা রয়েছে: devchat.tv/js-jabber/… । শেষ পর্যন্ত, প্রধান সুবিধাটি হ'ল আপনি পর্যবেক্ষণযোগ্য, এবং উপরের লিঙ্কে বর্ণিত এর জন্য একটি ব্যবহারের কেস বাতিল করতে পারেন - যখন কিছুটা স্বীকৃতি দেওয়া হয়েছে - তা হল আপনি যদি একাধিক এপিএসকে ডেকে থাকেন এবং কেবল প্রথম প্রতিক্রিয়া সম্পর্কে যত্নশীল হন, তবে তা কোনও ব্যাপার নয় আপনি যে এপিসটি বলেছেন সেগুলির মধ্যে প্রথমে আপনার কাছে ফিরে আসার পরে আপনি অন্যদের কাছে অনুরোধগুলি বাতিল করতে পারেন।
নিকোলাসলেব্ল্যাঙ্ক

2
@ নিকোলাসলেব্ল্যাঙ্ক, আমি নিশ্চিত যে আপনি এর জন্য। q.race () ব্যবহার করতে পারবেন?
jameslouiz

2
@ অ্যালেক্সপোলান, সুবিধাটি হ'ল একটি পর্যবেক্ষণ ভিত্তিক এইচটিটিপি পরিষেবা মিড-ফ্লাইট এইচটিটিপি অনুরোধ বাতিল করা সহজ করে তোলে। ট্রুঙ্গক 18 এর উত্তরের রেসের শর্তটি পরবর্তী অনুরোধ করার আগে এইচটিটিপি পর্যবেক্ষণযোগ্য থেকে কেবল সাবস্ক্রাইব করে সমাধান করা যেতে পারে। আরএক্সজেএস সুইচম্যাপটি অন্য পর্যবেক্ষণযোগ্য (উদাহরণস্বরূপ মানচেনিজ) দ্বারা চালিত এইচটিটিপি অনুরোধের জন্য ব্যবহার করা যেতে পারে। স্বতন্ত্র HTTP পর্যবেক্ষণযোগ্যদের জন্য, আপনি নিজেই সদস্যতা ত্যাগ ও পুনরায় সদস্যতা নিতে পারেন।
স্টিভেথামাকগুয়ে

234

প্রতিশ্রুতি এবং পর্যবেক্ষণযোগ্য উভয়ই জাভাস্ক্রিপ্টে অ্যাসিক্রোনাস কার্যকারিতা নিয়ে কাজ করতে সহায়তা করবে । এগুলি অনেক ক্ষেত্রেই একইরকম, তবে এখনও দুজনের মধ্যে কিছু পার্থক্য রয়েছে, প্রতিশ্রুতি এমন মান যা HTTP কলগুলির asynchronousমতো সমাধান করবে । অন্যদিকে, পর্যবেক্ষণযোগ্যরা অ্যাসিঙ্ক্রোনাস ইভেন্টগুলির ক্রম নিয়ে কাজ করে । তাদের মধ্যে প্রধান পার্থক্য নীচে তালিকাভুক্ত করা হয়েছে:

কথা দিচ্ছি:

  • একটি পাইপলাইন থাকার
  • সাধারণত শুধুমাত্র অ্যাসিঙ্ক ডেটা রিটার্ন সহ ব্যবহার করুন
  • বাতিল করা সহজ নয়

লক্ষণীয়:

  • বাতিলযোগ্য
  • পুনরায় চেষ্টা এবং পুনরায় চেষ্টা করার মতো প্রকৃতির দ্বারা পুনরায় পরীক্ষামূলক হয়
  • একাধিক পাইপলাইনে ডেটা স্ট্রিম করুন
  • মানচিত্র, ফিল্টার ইত্যাদির মতো অ্যারের মতো ক্রিয়াকলাপ
  • ইভেন্টের মতো অন্যান্য উত্স থেকে তৈরি করা যেতে পারে
  • তারা ফাংশন, যা পরে সাবস্ক্রাইব হতে পারে

এছাড়াও, আমি পার্থক্যটি দৃশ্যমানভাবে দেখানোর জন্য নীচে আপনার জন্য গ্রাফিকাল চিত্র তৈরি করেছি:

প্রতিশ্রুতি এবং পর্যবেক্ষণযোগ্য চিত্র


4
প্রতিশ্রুতি "বাতিল করা সহজ নয়", তাদের বাতিল করা কি সম্ভব?
পারদীপ জৈন

10
হ্যাঁ, এগুলিও বাতিল করার একটি উপায় আছে ... কিছু লোক ব্লুবার্ড বা তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে ... কৌণিকাগুলিতে কিউ লাইব্রেরি ব্যবহার করে এটি বাতিল করার উপায় রয়েছে ... তবে যেমনটি আমি খুব সহজ বলেছি না
আলিরিজা

একটি পাইপলাইন থাকার কখনও কখনও সুবিধা হয়, প্রাক্তন। অ্যাপ্লিকেশনগুলিতে, যদি আপনার একাধিক পাইপলাইন থাকে তবে এটি কখনও কখনও শেষ হতে পারে না বা একাধিকবার শেষ করতে পারে না।
উইন্ডমায়াও

6
একটি বাতিল করা Promiseকীভাবে প্রতিশ্রুতি দেয় তা ভেবে দেখার ভুল উপায়। Promiseএর দায়িত্ব এটা একটা ASYNC সামঞ্জস্যপূর্ণ ভাবে শুধুমাত্র হ্যান্ডেল সাফল্য বা ব্যর্থতা .. আপনি একটি HTTP অনুরোধ আপনি যদি অনুরোধটি না প্রতিশ্রুতি বাতিল, এবং হয় বাতিলের মেটান বা প্রতিশ্রুতি প্রত্যাখ্যান ফল করতে চান। jsfiddle.net/greggman/ea0yhd4p
gman

2
@gman অবিকল প্রতিশ্রুতি সহজভাবে কিছু ভবিষ্যতের মান উপস্থাপন করে । এটি অপারেশনটিকে উপস্থাপন করে না যা মান উত্পন্ন করে । আপনি কোনও মান বাতিল করতে পারবেন না। আপনি কোনও মান আবার চেষ্টা করতে পারবেন না। এটি কেবল একটি মান। এটি এখনও উপস্থিত থাকতে পারে বা নাও হতে পারে , এবং এটি কখনও উপস্থিত নাও হতে পারে কারণ একটি ব্যতিক্রম ঘটেছিল, তবে এটি।
যোনা অ্যাপলেট্রি

75

অঙ্গীকার

  1. সংজ্ঞা: আপনাকে অ্যাসিঙ্ক্রোনালি ফাংশনগুলি পরিচালনা করতে এবং তাদের রিটার্ন মানগুলি (বা ব্যতিক্রম) ব্যবহার করতে সাহায্য করে তবে কেবল একবার কার্যকর করা হলে।
  2. অলস না
  3. বাতিলযোগ্য নয় (এখানে প্রতিশ্রুতি গ্রন্থাগারগুলি রয়েছে যা বাতিলকরণকে সমর্থন করে তবে ES6 প্রতিশ্রুতি এতদিন হয় না)। সম্ভাব্য দুটি সিদ্ধান্ত
    • প্রত্যাখ্যান
    • সমাধান
  4. পুনরায় চেষ্টা করা যাবে না (প্রতিশ্রুতিগুলির মধ্যে মূল ফাংশনে অ্যাক্সেস থাকা উচিত যা পুনরায় চেষ্টা করার ক্ষমতা ফিরিয়ে দেওয়ার প্রতিশ্রুতি দেয় যা একটি খারাপ অভ্যাস)

Observables

  1. সংজ্ঞা: আপনাকে অ্যাসিঙ্ক্রোনালি ফাংশনগুলি চালাতে সহায়তা করে এবং কার্যকর করার সময় তাদের রিটার্ন মানগুলি একটি অবিচ্ছিন্ন ক্রমে ( একাধিক বার ) ব্যবহার করতে সহায়তা করে ।
  2. ডিফল্টরূপে, এটি অলস কারণ সময় অগ্রগতির সাথে মানগুলি নির্গত হয়।
  3. প্রচুর অপারেটর রয়েছে যা কোডিং প্রচেষ্টা সহজ করে তোলে।
  4. এক অপারেটর পুনরায় চেষ্টা যদি আমরা কিছু অবস্থার উপর ভিত্তি করে পর্যবেক্ষণযোগ্য পুনরায় চেষ্টা করতে হবে, যখনই প্রয়োজন পুনরায় চেষ্টা করতে ব্যবহার করা যেতে পারে retryWhen ব্যবহার করা যাবে।

    দ্রষ্টব্য : অপারেটরগুলির সাথে তাদের ইন্টারেক্টিভ ডায়াগ্রামগুলির একটি তালিকা এখানে RxMarbles.comউপলব্ধ


67

উত্তরগুলিতে অবজারবেবলগুলির একটি নেপথ্য অনুপস্থিত। প্রতিশ্রুতি ES7 async / অপেক্ষার ফাংশন ব্যবহার করার অনুমতি দেয়। তাদের সাথে আপনি এ্যাসক্রোনাস কোডটি লিখতে পারেন যেমন এটি একটি সিঙ্ক্রোনাস ফাংশন কল হবে, সুতরাং আপনার আর কলব্যাকের প্রয়োজন নেই। পর্যবেক্ষকরা এটি করার একমাত্র সম্ভাবনা হ'ল তাদের প্রতিশ্রুতিতে রূপান্তর করা। তবে আপনি যখন এগুলিকে প্রতিশ্রুতিতে রূপান্তর করেন, আপনার কাছে কেবলমাত্র একটি ফেরতের মান থাকতে পারে:

async function getData(){
    const data = await observable.first().toPromise();
    //do stuff with 'data' (no callback function needed)
}

আরও পঠন: আমি কীভাবে একটি আরএক্স পর্যবেক্ষণে অপেক্ষা করতে পারি?


21
এছাড়াও বিস্মিত কেন কেউ এই খুনি প্রতিশ্রুতিগুলির প্রতিশ্রুতি দেয় না - সরলতা এবং স্বচ্ছতা async / অপেক্ষা করার জন্য ধন্যবাদ। আমি ফ্ল্যাট কোড লেখার দক্ষতার জন্য প্রতিশ্রুতিগুলিতে স্যুইচ করেছি। সাধারণ ব্যবসায়িক যুক্তি এবং ইউআই ইন্টারঅ্যাকশন কোডটি রকেট বিজ্ঞানের মতো হওয়া উচিত নয় এবং প্রতিক্রিয়াশীল এক্সটেনশনের নেস্টেড নরকের দ্বারা দূষিত হওয়া উচিত। এছাড়াও, অ্যাসিঙ্ক / প্রতীক্ষা কেবল ভবিষ্যতে নয়, আপনি এখন সরকারী উত্পাদন অ্যাপ্লিকেশনগুলিতে ট্রান্সপোর্টার ব্যবহার করে এটি ব্যবহার করতে পারেন। আমি টাইপস্ক্রিপ্ট ২.৩ ব্যবহার করি এবং এটি বাস্তব ভাষার মতো দুর্দান্ত।
দুষ্টকোস

দুর্দান্ত, তবে একটি প্রতিক্রিয়াশীল উপায়ে এবং RxOperators এর সাথে সমস্ত কিছু চিন্তা করা সম্ভবত এটি হত্যাকারী বৈশিষ্ট্য নয়
জর্জেটোভার

37

প্রতিশ্রুতি এবং পর্যবেক্ষণযোগ্য উভয়ই কেবলমাত্র অ্যাসিনক্রোনাস কল পরিচালনা করে।

তাদের মধ্যে পার্থক্য এখানে:

লক্ষণীয়

  1. সময়ের সাথে একাধিক মান নির্ধারণ করে
  2. যতক্ষণ না আমরা পর্যবেক্ষণে সাবস্ক্রাইব করি ততক্ষণ বলা হয় না
  3. সাবস্ক্রাইব () পদ্ধতিটি ব্যবহার করে বাতিল করা যেতে পারে
  4. প্রত্যেকটি মানচিত্র, ফিল্টার, হ্রাস, পুনরায় চেষ্টা এবং অপারেটরগুলির পুনরায় চেষ্টা করুন

প্রতিশ্রুতি

  1. একসাথে কেবলমাত্র একক মান অনুকরণ করে

  2. .টেন এবং। ক্যাচ ছাড়াই পরিষেবাগুলিকে কল করে

  3. বাতিল করা যাবে না

  4. কোনও অপারেটর সরবরাহ করে না


2
প্রতিশ্রুতি দিয়ে ঠিক কী বোঝাতে চেয়েছেন তা কেবলমাত্র একক মানকে নির্ধারণ করে, যখন পর্যবেক্ষণযোগ্য একাধিককে বের করে
আবেল

2
একটি প্রতিশ্রুতি মোটেই মূল্য নির্গত করে না - একটি প্রতিশ্রুতি সময়ের সাথে সাথে একটি মান। এক প্রতিশ্রুতি মাল্টিস্টাস্ট যা একাধিক গ্রাহকদের কাছে মূল্য দেয় - একবার আপনি প্রতিশ্রুতিটি ধরে রাখলে আপনার ইতিমধ্যে একটি মান রয়েছে। একটি পর্যবেক্ষণযোগ্য একটি ফাংশনের মতো , এটিতে সাবস্ক্রাইব করা ক্রিয়াটিকে অনুরোধ করে।
বেনিয়ামিন গ্রুইনবাউম

1
@ বেনজামিন গ্রুয়েনবাউম এখনও আমি একাধিক গ্রাহকর মাধ্যম পাইনি আপনি দয়া করে একটি লিঙ্ক বা উদাহরণ সরবরাহ করতে পারেন। ধন্যবাদ
দীপক পাতিদার

2
observable1.subscribe (সাবস্ক্রাইবার 1), observable1.subscribe (সাবস্ক্রাইবার 2) - এটি একাধিকবার ফাংশনটি আহ্বান করে ।
বেনিয়ামিন গ্রুইনবাউম

2
দয়া করে সম্পাদনা আপনার পোস্ট এবং স্ক্রীনশটের পরিবর্তে প্রকৃত টেক্সট প্রদর্শন করুন। অন্যরা আপনার চিত্রগুলি অনুলিপি এবং কপি করতে পারে না, এবং আপনাকে ব্যাকরণের বহু ত্রুটিগুলিও ঠিক করতে সহায়তা করতে পারে না। বিশদ জন্য এখানে দেখুন । ধন্যবাদ.
পাং

25

যদিও এই উত্তরটি দেরি হয়ে গেছে, আমি নীচের পার্থক্যগুলির সংক্ষিপ্তসার করেছি,

লক্ষণীয়:

  1. পর্যবেক্ষণযোগ্য এমন এক functionযা গ্রহণ করে an observerএবং ফেরত দেয় function Observer: an object with next, error.
  2. পর্যবেক্ষক subscribe/unsubscribeতার ডেটা স্ট্রিমের অনুমতি দেয় , পর্যবেক্ষকের কাছে পরবর্তী মান নির্গমন করে, notifyপর্যবেক্ষক সম্পর্কে পর্যবেক্ষককে errorsঅবহিত করে এবং অবহিত করেstream completion
  3. পর্যবেক্ষক একটি function to handle next value, ত্রুটি এবং স্ট্রিমের শেষ সরবরাহ করে (ইউআই ইভেন্টস, এইচটিপি প্রতিক্রিয়া, ওয়েব সকেটের সাথে ডেটা)।
  4. multiple valuesসময়ের সাথে কাজ করে
  5. এটি cancel-able/retry-ableএবং যেমন অপারেটরদের সমর্থন করে map,filter,reduceetc.
  6. একটি পর্যবেক্ষণযোগ্য তৈরি করা হতে পারে - Observable.create()- পর্যবেক্ষণযোগ্য যে পদ্ধতিগুলি চালনা করতে পারে - - Observer Observable.from()একটি অ্যারে বা পুনরাবৃত্তিকে রূপান্তরিত করে - Observable Observable.fromEvent()- কোনও ইভেন্টকে পর্যবেক্ষণযোগ্যতে Observable.fromPromise()রূপান্তর করে - - প্রতিশ্রুতিটিকে পর্যবেক্ষণযোগ্যতে রূপান্তর করে - Observable.range()- স্পেসিড রেঞ্জের পূর্ণসংখ্যার ক্রম ফেরত দেয়

প্রতিশ্রুতি :

  1. একটি প্রতিশ্রুতি এমন একটি কাজের প্রতিনিধিত্ব করে যা ভবিষ্যতে শেষ হবে;

  2. প্রতিশ্রুতি হয়ে ওঠে resolved by a value;

  3. প্রতিশ্রুতি ব্যতিক্রম প্রত্যাখ্যান করা;

  4. না cancellableএবং এটি ফিরে আসেa single value

  5. একটি প্রতিশ্রুতি একটি ফাংশন প্রকাশ করে (then)

    -তখন নতুন ফিরে আসে promise;

    এর attachmentউপর ভিত্তি করে মৃত্যুদন্ড কার্যকর করা হবে state;

    - handlersমধ্যে guaranteedমৃত্যুদণ্ড কার্যকর করা হয় order attached;


20

আমি কেবল একটি ইস্যু মোকাবিলা করেছি যেখানে প্রতিশ্রুতিগুলি সর্বোত্তম সমাধান ছিল এবং আমি যে কেউ যদি এটি কার্যকর হয় সে ক্ষেত্রে এই প্রশ্নটি জুড়ে হোঁচট খাওয়ার জন্য এখানে এটি ভাগ করে নিচ্ছি (এটি ঠিক উত্তর ছিল যা আমি আগে খুঁজছিলাম):

একটি কৌণিক 2 প্রকল্পে আমার একটি পরিষেবা রয়েছে যা কিছু পরামিতি নেয় এবং একটি ফর্মের উপর ড্রপ ডাউন মেনুগুলি পপুলেট করার জন্য একটি মান তালিকা দেয়। যখন ফর্ম উপাদানটি আরম্ভ হয়, তখন অনেকগুলি ড্রপডাউন মেনু সংখ্যার জন্য বিভিন্ন পরামিতিগুলির সাথে একই পরিষেবাটি আমাকে একাধিকবার কল করতে হবে, তবে আমি যদি পরিষেবাটি কল করার জন্য কেবল সমস্ত ভেরিয়েবল সারি করি তবে কেবলমাত্র শেষটি সফল হয় এবং বাকী ত্রুটি হয় বাইরে। ডাটাবেস থেকে পরিষেবা আনার সময় একবারে কেবল একটি অনুরোধ পরিচালনা করতে পারে।

সমস্ত ড্রপডাউন মেনু ভেরিয়েবলগুলি সাফল্যের সাথে পপুলেশন করার একমাত্র উপায় ছিল পরিষেবাটি এমনভাবে কল করা যা শেষ অনুরোধটি শেষ না হওয়া পর্যন্ত কোনও নতুন অনুরোধটি প্রক্রিয়াজাতকরণ থেকে বাধা দেয় এবং প্রতিশ্রুতি /।

  fetchValueList(listCode): Promise<any> {
      return this.dataSvc.getValueList(listCode, this.stateSvc.currentContext, this.stateSvc.currentLanguageCode)
          .map(response => response.json())
          .toPromise();
  }

  initializeDropDowns() {
      this.fetchValueList('First-Val-List')
          .then(data => {
              this.firstValList = data;
              return this.fetchValueList('Second-Val-List')
          }).then(data => {
              this.secondValList = data;
              return this.fetchValueList('Third-Val-List')
          }).then(data => {
              this.thirdValList = data;
          })  }

আমি উপাদানটিতে ফাংশনগুলি সংজ্ঞায়িত করেছি এবং তারপরে এনজিওএনইনেটকে আর্কিটাইজড্রপডাউন () বলে।

ফেচভ্যালুলিস্ট ফাংশন একটি প্রতিশ্রুতি দেয়, সুতরাং প্রথম কলটি প্রথম তালিকা কোডটি পাস করে এবং যখন প্রতিশ্রুতিটি সমাধান হয়, তখন রিটার্নের মানটি .TL ব্লকের ডেটা ভেরিয়েবলে থাকে যেখানে আমরা এটি এই.ফার্টিভাললিস্ট ভেরিয়েবলকে নির্ধারণ করতে পারি। যেহেতু ফাংশনটি ডেটা ফিরেছে, আমরা জানি যে পরিষেবাটি শেষ হয়ে গেছে এবং দ্বিতীয় লিস্টকোড দিয়ে আবার কল করা নিরাপদ, রিটার্নের মানটি পরবর্তীটিতে ডেটা ভেরিয়েবলের মধ্যে থাকে then

সমস্ত ভেরিয়েবলগুলি পপুলেশন করার জন্য আমরা এটি যতবার প্রয়োজন শৃঙ্খল করতে পারি, এবং শেষ কোড ব্লকে আমরা কেবলমাত্র রিটার্নের স্টেটমেন্টটি বাদ দিতে পারি এবং ব্লকটি সমাপ্ত হয়।

এটি একটি খুব নির্দিষ্ট ব্যবহারের কেস যেখানে আমাদের একক পরিষেবাদি রয়েছে যা উপাদানকে আরম্ভ করার সাথে সাথে একাধিকবার কল করা প্রয়োজন এবং যেখানে পরিষেবাটি পুনরায় কল করার আগে তার ফিচারটি সম্পন্ন করতে হবে এবং কোনও মান ফিরিয়ে দিতে হবে, তবে এই ক্ষেত্রে, প্রতিশ্রুতি / .পথটি আদর্শ ছিল।


3
(উচ্চতর অর্ডার) পর্যবেক্ষণযোগ্যদের দ্বারা এটি অবশ্যই সম্ভব। আপনি উদাহরণস্বরূপ scan()পর্যবেক্ষণযোগ্যগুলির একটি স্ট্রিম তৈরি করতে ব্যবহার করতে পারেন । যাইহোক, আপনার পদ্ধতি সম্ভবত আরও স্পষ্ট এবং বোঝা সহজ।
lex82

1
আপনি "সুইচম্যাপ" দিয়ে "তারপরে" প্রতিস্থাপন করতে পারেন এবং ঠিক একই জিনিস ডাব্লু / পর্যবেক্ষণযোগ্য করতে পারেন।
ডঃ সি। হিলারিয়াস

1
সুইচম্যাপের সমস্যাটি যেমন আমি বুঝতে পেরেছি তা হ'ল এটি সমস্ত অনুরোধগুলি সমান্তরালভাবে শুরু করবে এবং তারা সমস্ত ফিরে না আসা পর্যন্ত অপেক্ষা করবে, তারপরে মানগুলি কলিং ফাংশনে ফিরিয়ে দেবে যেখানে আমার পরিস্থিতিতে আমার একক সার্ভার রয়েছে যা আমি পারছি না সমান্তরালে একাধিকবার কল করুন (সার্ভারটি যখন নতুনগুলি আসবে তখন অসম্পূর্ণ অনুরোধগুলি নামিয়ে দেবে), তাই আমাকে নতুন কল শুরু করার আগে ডাটাবেস পরিষেবাটিতে প্রতিটি কল সম্পূর্ণ হয়েছিল তা নিশ্চিত করে নিতে হয়েছিল, এবং প্রতিশ্রুতি / তারপরে সেরা বলে মনে হয়েছিল এবং সম্ভবত এটি সমাধান করার একমাত্র উপায়।
স্টিফেন আর স্মিথ

1
আপনি কেন শিকলযুক্ত মার্জম্যাপটি ব্যবহার করেন নি? যতদূর আমি আপনার কোড বুঝতে পেরেছি, এটি একটি খুব সাধারণ এবং আপনার উদাহরণের মতো কাজটি করে। @ স্টিফেনআর.স্মিত
ওরে

1
@ আপনি কি অন্য উত্তর হিসাবে একই সমস্যা সমাধানের একটি কোড উদাহরণ যুক্ত করতে পারেন? একটি ভাল রেফারেন্স হতে পারে এবং ভবিষ্যতে একটি ভাল সংশোধন করার সুযোগ হতে পারে। প্রয়োজনীয়তাটি হ'ল যে কোনও কোডই সমান্তরালভাবে ব্যাকএন্ড পরিষেবাটি কল করতে পারে না, এটি কল করতে হবে, রিটার্ন মানটির জন্য অপেক্ষা করুন এবং আবার কল করুন।
স্টিফেন আর স্মিথ

20

আমি বিশ্বাস করি অন্য সমস্ত উত্তরগুলি আপনার সন্দেহগুলি মুছে ফেলা উচিত। তবুও, আমি কেবল যুক্ত করতে চেয়েছিলাম যে পর্যবেক্ষণগুলি ফাংশনাল প্রোগ্রামিংয়ের উপর ভিত্তি করে রয়েছে এবং আমি এটির সাথে মানচিত্র, ফ্ল্যাটম্যাপ, হ্রাস, জিপ জাতীয় ফাংশনগুলি খুব দরকারী বলে মনে করি। বিশেষত যখন এটি API অনুরোধের উপর নির্ভর করে ওয়েব অবিচ্ছিন্নতা অর্জন করে তা নির্মম উন্নতি।

আমি দৃ document ়ভাবে এই ডকুমেন্টেশনটি সুপারিশ করছি , যেহেতু এটি বিক্রিয়াএক্সের অফিশিয়াল ডকুমেন্টেশন এবং আমি এটি সেখানে সবচেয়ে পরিষ্কার বলে মনে করি clear

আপনি যদি পর্যবেক্ষণে প্রবেশ করতে চান তবে আমি এই 3-অংশের পোস্টটি প্রস্তাব করব: http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/

যদিও এটি আরএক্সজাবার জন্য বোঝানো হয়েছে, ধারণাগুলি একই রকম এবং এটি সত্যই সুন্দরভাবে ব্যাখ্যা করা হয়েছে। প্রতিক্রিয়াশীল ডকুমেন্টেশনে আপনার প্রতিটি ফাংশনের সমতুল্যতা রয়েছে। আপনাকে অবশ্যই আরএক্সজেএসের সন্ধান করতে হবে।


18

প্রতিশ্রুতি:

  • ভবিষ্যতের একক মান সরবরাহ করুন;
  • অলস না;
  • বাতিলযোগ্য নয়;

লক্ষণীয়:

  • সময়ের সাথে সাথে একাধিক মান নির্ধারণ করে;
  • অলস;
  • Cancellable;
  • মানচিত্র, ফিল্টার, হ্রাস এবং অনুরূপ অপারেটর সমর্থন করে

আপনি চাইলে কৌণিক HTTP এ কল করার সময় আপনি পর্যবেক্ষণের পরিবর্তে প্রতিশ্রুতি ব্যবহার করতে পারেন।


16

সংক্ষিপ্ত বিবরণ:

  • প্রতিশ্রুতি এবং পর্যবেক্ষণযোগ্য উভয়ই অ্যাসিক্রোনাস অপারেশনগুলির মোকাবেলায় সহায়তা করে। এই অ্যাসিক্রোনাস অপারেশনগুলি করা হয়ে গেলে তারা নির্দিষ্ট কলব্যাকগুলি কল করতে পারে।
  • একটি প্রতিশ্রুতি শুধুমাত্র একটি ইভেন্ট পরিচালনা করতে পারে, পর্যবেক্ষণযোগ্য সময়ের সাথে সাথে ইভেন্টগুলির স্ট্রিমগুলির জন্য
  • প্রতিশ্রুতিগুলি মুলতুবি থাকার পরে বাতিল করা যাবে না
  • ডেটা অবজার্ভেবলস এমিট অপারেটর ব্যবহার করে রূপান্তরিত হতে পারে

অবিচ্ছিন্ন আচরণের জন্য আপনি সর্বদা একটি পর্যবেক্ষণযোগ্য ব্যবহার করতে পারেন যেহেতু একটি পর্যবেক্ষণযোগ্য সমস্ত কার্যকারিতা যা প্রতিশ্রুতি দেয় (+ অতিরিক্ত)। তবে, কখনও কখনও এই অতিরিক্ত কার্যকারিতা যা পর্যবেক্ষণযোগ্যরা অফার করে তা প্রয়োজন হয় না। তারপরে এটি ব্যবহার করার জন্য কোনও লাইব্রেরি আমদানি করা অতিরিক্ত ওভারহেড হবে।

প্রতিশ্রুতি কখন ব্যবহার করবেন:

আপনি যখন ফলাফলটি প্রসেস করতে চান এমন একক অ্যাসিঙ্ক অপারেশন থাকবে তখন প্রতিশ্রুতি ব্যবহার করুন । উদাহরণ স্বরূপ:

var promise = new Promise((resolve, reject) => {
  // do something once, possibly async
  // code inside the Promise constructor callback is getting executed synchronously

  if (/* everything turned out fine */) {
    resolve("Stuff worked!");
  }
  else {
    reject(Error("It broke"));
  }
});

//after the promise is resolved or rejected we can call .then or .catch method on it

promise.then((val) => console.log(val))      // logs the resolve argument
       .catch((val) => console.log(val));    // logs the reject argument

সুতরাং একটি প্রতিশ্রুতি এমন কিছু কোড কার্যকর করে যেখানে এটি সমাধান করে বা প্রত্যাখ্যান করে। যদি সমাধান বা প্রত্যাখাত হয় বলা হয় প্রতিশ্রুতি মুলতুবি থাকা অবস্থায় থেকে একটি সমাধান বা প্রত্যাখ্যাত রাষ্ট্র হয় to প্রতিশ্রুতিবদ্ধ রাষ্ট্রটি সমাধান করা হলে then()পদ্ধতিটি বলা হয়। প্রতিশ্রুতিবদ্ধ রাষ্ট্রটি প্রত্যাখাত হলে, catch()পদ্ধতিটি বলা হয়।

পর্যবেক্ষণযোগ্যগুলি কখন ব্যবহার করবেন:

সময়ের সাথে সাথে যখন কোনও স্ট্রিম (ডেটার) থাকে তখন অবজারভেবলগুলি ব্যবহার করুন । একটি স্ট্রিম ডেটা উপাদানগুলির একটি ক্রম যা সময়ের সাথে সাথে উপলব্ধ করা হচ্ছে । স্ট্রিমগুলির উদাহরণ হ'ল:

  1. ব্যবহারকারীর ইভেন্টগুলি, যেমন ক্লিক বা কীআপ ইভেন্ট up ব্যবহারকারী সময়ের সাথে সাথে ইভেন্টগুলি (ডেটা) উত্পন্ন করে।
  2. ওয়েবসকেটগুলি, ক্লায়েন্টটি সার্ভারের সাথে একটি ওয়েবসকেট সংযোগ তৈরি করার পরে এটি সময়ের সাথে সাথে ডেটা পুশ করে।

পরের ইভেন্টটি কখন ঘটেছিল, কখন ত্রুটি ঘটেছিল বা পর্যবেক্ষণযোগ্য সম্পন্ন হয় তা পর্যবেক্ষণে নিজেই নির্দিষ্ট করা হয় । তারপরে আমরা এই পর্যবেক্ষণযোগ্যতে সাবস্ক্রাইব করতে পারি, যা এটি সক্রিয় করে এবং এই সাবস্ক্রিপশনে, আমরা 3 কলব্যাকগুলিতে পাস করতে পারি (সবসময় সব কিছুতেই পাস করতে হবে না)। সাফল্যের জন্য কার্যকর করা একটি কলব্যাক, ত্রুটির জন্য একটি কলব্যাক এবং সমাপ্তির জন্য একটি কলব্যাক। উদাহরণ স্বরূপ:

const observable = Rx.Observable.create(observer => {
  // create a single value and complete
  observer.onNext(1);
  observer.onCompleted();
});

source.subscribe(
  x => console.log('onNext: %s', x),   //  success callback
  e => console.log('onError: %s', e),  //  error callback
  () => console.log('onCompleted')     //  completion callback
 );

// first we log: onNext: 1
//  then we log: onCompleted

একটি পর্যবেক্ষণযোগ্য তৈরি করার সময় এটিতে একটি কলব্যাক ফাংশন প্রয়োজন যা একটি পর্যবেক্ষককে যুক্তি হিসাবে সরবরাহ করে। এই পর্যবেক্ষক, আপনি তারপর কল করতে পারেন onNext, onCompleted, onError। তারপরে যখন পর্যবেক্ষণযোগ্য এটিতে সাবস্ক্রাইব হবে তখন সাবস্ক্রিপশনে পাস হওয়া সংশ্লিষ্ট কলব্যাকগুলি কল করবে।


9

প্রতিশ্রুতি - একক ভবিষ্যতের মান প্রদান করুন। অলস না . বাতিল-সক্ষম নয়। এটি হয় প্রত্যাখ্যান বা সমাধান করবে।

পর্যবেক্ষণযোগ্য - একাধিক ভবিষ্যতের মান সরবরাহ করুন। অলস বাতিল-সক্ষম এটি অন্যান্য পদ্ধতি লাইভ ম্যাপ, ফিল্টার, হ্রাস প্রদান করে।


8

প্রতিজ্ঞা বনাম পর্যবেক্ষণযোগ্য মিলের আগে

  1. উভয়ই অ্যাসিঙ্ক কোডটি পরিচালনা করতেন।
  2. প্রতিশ্রুতি উদাহরণ জন্য সন্ধান করুন। প্রতিশ্রুতিবদ্ধ কনস্ট্রাক্টর একটি রেজোলিউশন রেফারেন্স ফাংশন পাস করে যা কিছু অ্যাসিঙ্ক টাস্ক শেষ হওয়ার পরে যখন কোনও মান সহ কল ​​করা হয় তখন কল হবে।

const promise = new Promise(resolve => {
  setTimeout(() => {
    resolve("Hello from a Promise!");
  }, 2000);
});

promise.then(value => console.log(value));

  1. এখন পর্যবেক্ষণযোগ্য উদাহরণ। এখানেও আমরা একটি ফাংশন পর্যবেক্ষণযোগ্য, অ্যাসিঙ্ক টাস্কটি পরিচালনা করার জন্য একটি পর্যবেক্ষককে পাস করি। প্রতিশ্রুতিতে সমাধানের বিপরীতে এর নিম্নলিখিত পদ্ধতি রয়েছে এবং তার পরিবর্তে সাবস্ক্রাইব করে।

  2. সুতরাং উভয়ই অ্যাসিঙ্ক কার্য পরিচালনা করে। এবার আসুন পার্থক্যটি দেখুন।


const observable = new Observable(observer => {
  setTimeout(() => {
    observer.next('Hello from a Observable!');
  }, 2000);
});

observable.subscribe(value => console.log(value));

প্রতিজ্ঞা বনাম পর্যবেক্ষণযোগ্য পার্থক্য

প্রতিশ্রুতি

  1. এটি একক মানকে সমাধান বা প্রত্যাখ্যান করে এবং একসাথে একক মান async কার্য পরিচালনা করতে পারে।
  2. প্রতিশ্রুতি একবারে এটি সম্পূর্ণ হওয়া অ্যাসিঙ্ক মানটি সমাধান করে, আর ব্যবহার করা যাবে না just কেবলমাত্র এককালীন ব্যবহার এবং এখানে এটি সংক্ষিপ্ত হয়ে যায়।
  3. বাতিলযোগ্য নয়
  4. অপারেটরগুলির জন্য কোনও rxjs সমর্থন নেই।

লক্ষণীয়

  1. একাধিক অ্যাসিনক্রোনাস মান নির্গত করার ক্ষমতা।
  2. ইভেন্ট বা মানগুলির স্ট্রিম পরিচালনা করতে ব্যবহৃত হয়। আপনার বিবেচনা করুন যে আপনার অসংখ্য কার্য বা মানগুলির একটি অ্যারে রয়েছে এবং আপনি চান প্রতিটি সময় মান এতে isোকানো হবে এটি স্বয়ংক্রিয়ভাবে পরিচালনা করা উচিত। আপনি যে কোনও সময় এই অ্যারেটিতে কোনও মান চাপান, এর সমস্ত গ্রাহকরা স্বয়ংক্রিয়ভাবে সর্বশেষতম মান পাবেন।
  3. পর্যবেক্ষণগুলি ইনপুট পরিবর্তনগুলি, বারবার বিরতি, সমস্ত সন্তানের উপাদানগুলিতে ব্রডকাস্ট মান, ওয়েব সকেট পুশ বিজ্ঞপ্তি ইত্যাদির জন্য দরকারী are
  4. যেকোন সময় আনসাবস্ক্রাইব পদ্ধতি ব্যবহার করে বাতিল করা যেতে পারে।
  5. আর একটি শেষ ভাল অংশ যা প্রতিশ্রুতি দেয় তা হ'ল rxjs অপারেটরদের জন্য সমর্থন। সাবস্ক্রাইব করার আগে পর্যবেক্ষণযোগ্য ডেটা রুপান্তর করতে আপনার কাছে অনেকগুলি পাইপ অপারেটর রয়েছে প্রধানত মানচিত্র, ফিল্টার, সুইচম্যাপ, কম্বিনেস্টেস্ট ইত্যাদি।

এখানে চিত্র বর্ণনা লিখুন



6

প্রতিশ্রুতি এবং পর্যবেক্ষণযোগ্য উভয়ই অ্যাসিক্রোনাস অপারেশনগুলির মোকাবেলায় সহায়তা করে। এই অ্যাসিক্রোনাস অপারেশনগুলি করা হয়ে গেলে তারা নির্দিষ্ট কলব্যাকগুলি কল করতে পারে।

কৌণিকটি পর্যবেক্ষণগুলি ব্যবহার করে যা এইচটিটিপি নিয়ে কাজ করার প্রতিশ্রুতির পরিবর্তে আরএক্সজেএস থেকে আসে

Below are some important differences in promises & Observables.

প্রতিশ্রুতি এবং পর্যবেক্ষণযোগ্য মধ্যে পার্থক্য


1
ট্যাবুলেটেড ডেটাটি ভুল বলে মনে হচ্ছে, শিরোনামটি অদলবদল করা উচিত
ডেরিক.এক্স

1
দয়া করে সম্পাদনা আপনার পোস্ট এবং এর পরিবর্তে লেখা স্ক্রিনশট হিসাবে প্রকৃত বিষয়বস্তু প্রদর্শন করুন। অন্যরা আপনার চিত্রগুলি অনুলিপি এবং আটকানো যাবে না। বিশদ জন্য এখানে দেখুন । ধন্যবাদ.
পাং

6

যখন একটি অ্যাসিঙ্ক ক্রিয়াকলাপ শেষ হয়ে যায় বা ব্যর্থ হয় তখন কোনও প্রতিশ্রুতি একটি একক ইভেন্টের প্রকাশ করে।

একটি পর্যবেক্ষণযোগ্য একটি স্ট্রিমের মতো (অনেক ভাষায়) এবং কমপক্ষে শূন্য বা আরও বেশি ইভেন্টগুলিতে পাস করার অনুমতি দেয় যেখানে প্রতিটি ইভেন্টের জন্য কলব্যাকের প্রয়োজন হয়।

এটি প্রতিশ্রুতির হাইলাইটগুলি এবং আরও অনেক কিছু দেয় বলে প্রায়শই পর্যবেক্ষণযোগ্য প্রতিশ্রুতির চেয়ে বেশি পছন্দ হয়। পর্যবেক্ষণযোগ্য দ্বারা আপনার 0, 1, বা বিভিন্ন ইভেন্ট হ্যান্ডেল করা দরকার কিনা তা বিবেচনা করে না। আপনি প্রতিটি মামলার জন্য অনুরূপ এপিআই ব্যবহার করতে পারেন।

প্রতিশ্রুতি: প্রতিশ্রুতি একক মান প্রকাশ করে

উদাহরণ স্বরূপ:

const numberPromise = new Promise((resolve) => {
    resolve(5);
    resolve(10);
});

numberPromise.then(value => console.log(value));
// still prints only 5

পর্যবেক্ষণযোগ্য: একটি সময়কালে একাধিক মান নির্ধারণ করে

উদাহরণ স্বরূপ:

  const numberObservable = new Observable((observer) => {
        observer.next(5);
        observer.next(10);
    });

numberObservable.subscribe(value => console.log(value));
// prints 5 and 10

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

প্রতিশ্রুতি:

  • একটি প্রতিশ্রুতি অলস নয়
  • একটি প্রতিশ্রুতি বাতিল করা যাবে না

লক্ষণীয়:

  • পর্যবেক্ষণযোগ্য অলস। "পর্যবেক্ষণযোগ্য" মন্থর। আমরা এটির সদস্যতা না পাওয়া পর্যন্ত এটি বলা হয় না।
  • সাবস্ক্রাইব () পদ্ধতি ব্যবহার করে একটি পর্যবেক্ষণযোগ্য বাতিল করা যেতে পারে
  • একটি সংযোজন পর্যবেক্ষণযোগ্য অনেক শক্তিশালী অপারেটর যেমন মানচিত্র, ফোরচ, ফিল্টার, হ্রাস, পুনরায় চেষ্টা, পুনরায় চেষ্টা করুন ইত্যাদি সরবরাহ করে hen

কৌণিক প্রতিশ্রুতি বনাম পর্যবেক্ষণযোগ্য


5

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

প্রতিশ্রুতি

const promise = new Promise((data) =>
{ data(1);
  data(2);
  data(3); })
.then(element => console.log(‘Promise ‘ + element));

আউটপুট

Promise 1

লক্ষণীয়

const observable = new Observable((data) => {
data.next(1);
data.next(2);
data.next(3);
}).subscribe(element => console.log('Observable ' + element));

আউটপুট

Observable 1
Observable 2
Observable 3

3

নীচে প্রতিশ্রুতি ও পর্যবেক্ষণে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।

প্রতিশ্রুতি

  • শুধুমাত্র একক মান নির্ধারণ করে
  • বাতিলযোগ্য নয়
  • শেরেবল নয়
  • সর্বদা অবিচ্ছিন্ন ous

লক্ষণীয়

  • একাধিক মান নির্ধারণ করে
  • যখন ডাকা হয় বা কেউ সদস্যতা নিচ্ছে কেবল তখনই তা সম্পাদন করে
  • বাতিল হতে পারে
  • একাধিক গ্রাহক দ্বারা ভাগ করা এবং ভাগ করা মানটি ভাগ করা যায়। এবং সমস্ত গ্রাহকরা একক সময় নির্বাহ করবেন।
  • সম্ভবত অ্যাসিনক্রোনাস

আরও ভাল বোঝার জন্য https://stackblitz.com/edit/observable-vs-promises দেখুন


3

আমি প্রচুর লোককে তর্কটি ব্যবহার করে দেখতে পাচ্ছি যে পর্যবেক্ষণযোগ্য "বাতিলযোগ্য" তবে এটি প্রতিশ্রুতি "বাতিল" হিসাবে তৈরি করা বরং তুচ্ছ

function cancellablePromise(body) {
  let resolve, reject;
  const promise = new Promise((res, rej) => {
    resolve = res; reject = rej;
    body(resolve, reject)
  })
  promise.resolve = resolve;
  promise.reject = reject;
  return promise
}

// Example 1: Reject a promise prematurely
const p1 = cancellablePromise((resolve, reject) => {
  setTimeout(() => resolve('10', 100))
})

p1.then(value => alert(value)).catch(err => console.error(err))
p1.reject(new Error('denied')) // expect an error in the console

// Example: Resolve a promise prematurely
const p2 = cancellablePromise((resolve, reject) => {
  setTimeout(() => resolve('blop'), 100)
})

p2.then(value => alert(value)).catch(err => console.error(err))
p2.resolve(200) // expect an alert with 200


2

সংক্ষিপ্ত উত্তর :

লক্ষণীয় হয় ভাল , এটি সব আছে অঙ্গীকার বৈশিষ্ট্য প্লাস অতিরিক্ত বৈশিষ্ট্য।


দীর্ঘ উত্তর:

প্রতিজ্ঞা করেন:

  • এক সময় "একবার ডেটা রিটার্ন করুন" ব্যবহার করুন
  • বাতিল নয়
  • এক শ্রোতা
  • কোনও সকেট সমর্থন করে না কোনও শ্রোতা

লক্ষণীয়:

  • ডেটা পরিবর্তন হিসাবে ডেটা ফেরত দিন
  • সমর্থন বাতিল
  • সমর্থন সকেট
  • অনেক শ্রোতাদের সমর্থন করুন এবং ডেটা পরিবর্তিত হলে তাদেরকে অবহিত করুন
  • সমর্থন মানচিত্র, ফিল্টার, হ্রাস

আমি মনে করি না আপনি বলতে পারবেন পর্যবেক্ষণগুলি উদ্দেশ্যগতভাবে আরও ভাল। এখানে বিভিন্ন উত্তরে লক্ষ করা যায় পর্যবেক্ষণযোগ্যদের ডাউনসাইডের সংখ্যা। আমার কাছে যেগুলি দেখা দেয় সেগুলি হ'ল পর্যবেক্ষণের জটিলতা এবং তারা প্রত্যক্ষ / অ্যাসিঙ্কের সাথে সরাসরি কাজ করে না। আমি ব্যক্তিগতভাবে তাদের সাথে কাজ করা সত্যিই কঠিন বলে মনে করি কারণ আপনি এটি পর্যবেক্ষণযোগ্য ব্যবহার করার সময় আচরণটি নির্ধারণ করতে পারবেন না - আপনাকে কোডটি দেখেছিল যা এটি তৈরি করেছে। যদিও একটি প্রতিশ্রুতি সহ আপনি জানেন যে তারা সর্বদা কীভাবে কাজ করে। উদাহরণস্বরূপ, কখনও কখনও একটি পর্যবেক্ষণযোগ্যতে সাবস্ক্রাইব করার পার্শ্ব প্রতিক্রিয়া হয় (যেমন একটি HTTP অনুরোধ), তবে কখনও কখনও তা হয় না।
যোনা অ্যাপলেট্রি

কৌণিক ক্ষেত্রে এটি আপনার ক্ষেত্রে নির্ভর করে। বেশিরভাগ ক্ষেত্রে আমরা পরিষেবা এবং কিছু ডেটা নিয়ে কাজ করব যা বিভিন্ন স্থান, সকেট, বাতিলকরণ, মানচিত্র, ফিল্টার এবং হ্রাসকে প্রভাবিত করবে। সুতরাং তাদের ক্ষেত্রে সমর্থন না করার প্রতিশ্রুতি হিসাবে এটি ভাল হবে। সুতরাং এটি আবার আপনার মামলার উপর নির্ভর করে
আমর ইব্রাহিম

2

যদিও স্বীকৃত উত্তরটি সাধারণভাবে ভাল তবে আমি মনে করি না যে এটি জোর দেয় যে কৌণিক উপাদানগুলির সাথে কাজ করার সময় আপনি প্রায় সর্বদা একটি পর্যবেক্ষণযোগ্য ব্যবহার করতে চান কারণ এটি বাতিলকরণকে সমর্থন করে। প্রতিশ্রুতি বাতিল হতে পারে না এবং আপনার উপাদানটি ধ্বংস হয়ে গেলেও সমাধান করবে। কৌণিক এটি না হওয়া পর্যন্ত ক্ষমা করে থাকে।

উদাহরণস্বরূপ, কোনও ধ্বংস হওয়া উপাদানটিতে কোনও ম্যানুয়াল পরিবর্তন সনাক্তকরণ ব্যতিক্রম ঘটায়:

ngOnInit() {
  // promise api
  this.service.getData().then(d => {
     this.data = d;
     this.changeDetectorRef.detectChanges();
  });

  // observable api
  this.service.getData().pipe(takeUntil(this.unsubscribe)).subscribe((d) => {
     this.data = d;
     this.changeDetectorRef.detectChanges();
  });
}

প্রতিশ্রুতি সমাধানের আগে যদি আপনার উপাদানটি বিনষ্ট হয় তবে প্রতিশ্রুতিটি সমাধান হওয়ার পরে আপনি একটি attempt to use destroyed viewত্রুটি পাবেন ।

বিকল্পভাবে, আপনি যদি অবলম্বনগুলি টেকউইনটিল প্যাটার্নের সাথে ব্যবহার করেন তবে আপনার উপাদানটি ধ্বংস হওয়ার সাথে সাথেই সাবস্ক্রিপশন বাতিল হয়ে যাবে।

এটি সামান্য একটি উদাহরণযুক্ত উদাহরণস্বরূপ তবে ধ্বংস হওয়া কোন উপাদানটির কোড কার্যকর করা সম্ভবত বাগগুলি নিয়ে যেতে চলেছে। যদি না আপনি আসলে কোনও কারণে এটি করতে চান: পি


2

টিউটোরিয়াল এবং ডক্সের প্রথম পড়া থেকে আমি এর মধ্যে যা ছড়িয়েছি তা স্পষ্ট ছিল না মাল্টিকাস্টিংয়ের ধারণা।

নিশ্চিত হয়ে নিন যে আপনি ডিফল্টরূপে, একাধিক সাবস্ক্রিপশন পর্যবেক্ষণে একাধিক ফাঁসি কার্যকর করতে পারে trigger একক HTTP কল পর্যবেক্ষণযোগ্য একাধিক সাবস্ক্রিপশন আপনি .share()(মাল্টিকাস্টিং সক্ষম না করা ) একাধিক অভিন্ন HTTP কলগুলি ট্রিগার করবে ।

একটি প্রতিশ্রুতি আপনাকে একবারে একটি জিনিস মোকাবেলা করতে বাধ্য করে, এর ডেটা আনপ্রেট করে, ব্যতিক্রমগুলি পরিচালনা করে, অ্যাসিঙ্ক / প্রতীক্ষার মতো শীতল জিনিসের জন্য ভাষা সমর্থন দেয় এবং অন্যথায় এটি বেশ নগ্ন হয়।

একটি পর্যবেক্ষণযোগ্যটিতে প্রচুর ঘণ্টা এবং হুইসেল থাকে তবে আপনার যে শক্তি নিয়ে কাজ করছেন তা বোঝার প্রয়োজন বা এটির অপব্যবহার করা যেতে পারে।


2

প্রতিশ্রুতি:

একটি অ্যাসিঙ্ক ইভেন্ট হ্যান্ডলার - প্রতিশ্রুতি বস্তু একটি অ্যাসিঙ্ক্রোনাস অপারেশনের শেষ সমাপ্তি (বা ব্যর্থতা) এবং এর ফলাফলের মান উপস্থাপন করে।

সিনট্যাক্স: নতুন প্রতিশ্রুতি (নির্বাহক);

উদাহরণ:

var promise_eg = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});

promise_eg.then(function(value) {
  console.log(value);
  // expected output: "foo"
});

console.log(promise_eg);

এখানে চিত্র বর্ণনা লিখুন

প্রতিশ্রুতি সম্পর্কে: এটিতে একটি পাইপলাইন রয়েছে তাই এটি ডাকা হলে কেবল এটির মান ফিরে আসবে। এটির ওয়ান ওয়ে হ্যান্ডলারটি একবার কল করলে আপনি বাতিল করতে পারবেন না। আপনি চারপাশে, কখন () এবং তারপরে () খেলতে পারবেন দরকারী সিনট্যাক্স

Observables:

পর্যবেক্ষণযোগ্য হ'ল সময়ের সাথে সাথে একাধিক মানের অলস সংগ্রহ। এটি আসিঙ্ক অপারেশনের জন্য সত্যই দুর্দান্ত পন্থা। এটি আরএক্সজেএস দিয়ে করা যেতে পারে যার ক্রস প্ল্যাটফর্ম সমর্থনটি কৌনিক / প্রতিক্রিয়া ইত্যাদির সাহায্যে ব্যবহার করতে পারে has

এটি স্ট্রিম লাইনারের মতো কাজ করে। মাল্টি পাইপলাইন হতে পারে। একবারে সংজ্ঞায়িত হয়ে গেলে আপনি অনেক জায়গায় রিটার্নের ফলাফল পেতে সাবস্ক্রাইব করতে পারেন।

সিনট্যাক্স: import * as Rx from "@reactivex/rxjs"; টু ডিআইডি:

Rx.Observable.fromEvent(button, "click"),
Rx.Subject()

ইত্যাদি

সাবস্ক্রাইব করতে: RxLogger.getInstance();

উদাহরণ:

import { range } from 'rxjs';
import { map, filter } from 'rxjs/operators';

range(1, 200).pipe(
  filter(x => x % 2 === 1),
  map(x => x + x)
).subscribe(x => console.log(x));

যেহেতু এটি মাল্টি পাইপলাইন সমর্থন করে আপনি বিভিন্ন স্থানে ফলাফল সাবস্ক্রাইব করতে পারেন, এখানে চিত্র বর্ণনা লিখুন এটির প্রতিশ্রুতির চেয়ে অনেক বেশি সম্ভাবনা রয়েছে।

ব্যবহার: এর মতো আরও সম্ভাবনা রয়েছেmap, filter, pipe, map, concatMap etc


2

পর্যবেক্ষণযোগ্য ও প্রতিশ্রুতির মধ্যে মূল পার্থক্য হ'ল:

এখানে চিত্র বর্ণনা লিখুন


2
দয়া করে সম্পাদনা আপনার পোস্ট এবং এর পরিবর্তে লেখা স্ক্রিনশট হিসাবে প্রকৃত বিষয়বস্তু প্রদর্শন করুন। অন্যরা আপনার চিত্রগুলি অনুলিপি এবং আটকানো যাবে না। বিশদ জন্য এখানে দেখুন । ধন্যবাদ.
পাং

1

পর্যবেক্ষণগুলি প্রায়শই প্রতিশ্রুতির সাথে তুলনা করা হয়। এখানে কিছু মূল পার্থক্য রয়েছে:

পর্যবেক্ষণযোগ্য ঘোষিত হয়; সাবস্ক্রিপশন না হওয়া পর্যন্ত গণনা শুরু হয় না। প্রতিশ্রুতি তৈরি করার সাথে সাথেই কার্যকর করা হবে। এটি রেসিপিগুলি সংজ্ঞায়িত করার জন্য পর্যবেক্ষণযোগ্যকে দরকারী করে তোলে যা যখনই আপনার ফলাফলের প্রয়োজন হয় তখন চালানো যেতে পারে।

পর্যবেক্ষণযোগ্যরা অনেক মান সরবরাহ করে। প্রতিশ্রুতি এক প্রদান। এটি সময়ের সাথে একাধিক মান পাওয়ার জন্য পর্যবেক্ষণযোগ্যকে দরকারী করে তোলে।

চেইঞ্জিং এবং সাবস্ক্রিপশনের মধ্যে পর্যবেক্ষণযোগ্যরা পার্থক্য করতে পারে ate প্রতিশ্রুতিগুলিতে কেবল। কাজটি সম্পাদন না করেই সিস্টেমের অন্যান্য অংশগুলি ব্যবহার করতে জটিল রূপান্তর রেসিপি তৈরির জন্য পর্যবেক্ষণযোগ্যকে দরকারী করে তোলে।

পর্যবেক্ষণযোগ্য সাবস্ক্রাইব () ত্রুটিগুলি পরিচালনা করার জন্য দায়ী। সন্তানের প্রতিশ্রুতিগুলিতে চাপের ত্রুটিগুলি প্রতিশ্রুতি দেয়। এটি কেন্দ্রিয়ায়িত এবং প্রত্যাশাযোগ্য ত্রুটি পরিচালনার জন্য পর্যবেক্ষণযোগ্যকে দরকারী করে তোলে।

এটি সবচেয়ে সহজ পার্থক্য যা আপনি অ্যানগুলার.আইও ডক্সে খুঁজে পেতে পারেন। বাকী উত্তর বেশিরভাগ দ্বারা দেওয়া হয় তার নিজের জায়গায় সঠিক


1
  1. প্রতিশ্রুতি শুধুমাত্র একক মান বা সমাধানের জন্য ফোকাস করা হয়, পর্যবেক্ষণযোগ্য ডেটা স্ট্রিম।

  2. পর্যবেক্ষকগুলি বাতিল হতে পারে তবে প্রতিশ্রুতি বাতিল হতে পারে না।

সবচেয়ে কম পরিচিত একজন, আমার কাছে কমপক্ষে

  1. প্রতিশ্রুতি সর্বদা অ্যাসিনক্রোনাস প্রকৃতির হয়, তবে পর্যবেক্ষণযোগ্য দুটি সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস হতে পারে।

0
  1. একটি প্রতিশ্রুতি আগ্রহী, যেখানে একটি পর্যবেক্ষণযোগ্য অলস,
  2. একটি প্রতিশ্রুতি সর্বদা অবিচ্ছিন্ন থাকে, তবে একটি পর্যবেক্ষণযোগ্য সিনক্রোনাস বা অ্যাসিনক্রোনাস হতে পারে,
  3. একটি প্রতিশ্রুতি একটি একক মান প্রদান করতে পারে, যেখানে একটি পর্যবেক্ষণযোগ্য হয়
    মানগুলির স্রোত (0 থেকে একাধিক মান পর্যন্ত),
  4. নতুন তৈরি স্ট্রিমটি পেতে আপনি পর্যবেক্ষণযোগ্যটিতে আরএক্সজেএস অপারেটরদের প্রয়োগ করতে পারেন।

-1

পর্যবেক্ষণযোগ্য ও প্রতিশ্রুতিগুলি জাভাস্ক্রিপ্ট / টাইপ স্ক্রিপ্টে অ্যাসিক্রোনাস কার্যকারিতা নিয়ে কাজ করতে আমাদের সহায়তা করছে are এগুলি অনেক ক্ষেত্রে খুব একই রকম, তবে তাদের মধ্যে এখনও কিছু পার্থক্য রয়েছে।

এখানে চিত্র বর্ণনা লিখুন


1
দয়া করে সম্পাদনা আপনার পোস্ট এবং স্ক্রীনশটের পরিবর্তে প্রকৃত টেক্সট প্রদর্শন করুন। অন্যরা আপনার চিত্রগুলি অনুলিপি এবং আটকানো যাবে না। বিশদ জন্য এখানে দেখুন । ধন্যবাদ.
পাইং

কোডটি নয়, সরল তথ্য ব্যতীত, তাই আমি মনে করি এটি একটি চিত্র হিসাবে পোস্ট করা ঠিক আছে
Alator

1
কুডভেনকাটের ইউটিউব ভিডিওগুলি থেকে অনুলিপি আটকানো বন্ধ করুন। আমার থেকে ডাউনওয়েট! :)
প্রতীক

-2

ইতিমধ্যে এই বিষয়টিতে প্রচুর উত্তর রয়েছে তাই আমি কোনও অতিরিক্ত বাছাই করা যুক্ত করব না।

তবে যে কেউ কেবলমাত্র পর্যবেক্ষণযোগ্য / কৌণিক শিখতে শুরু করেছেন এবং কোনটি প্রতিশ্রুতির সাথে তুলনা করবেন তা অবাক করে দেওয়ার জন্য , আমি আপনাকে সুপারিশ করব যে আপনি সবকিছু পর্যবেক্ষণযোগ্য রাখুন এবং আপনার প্রকল্পের বিদ্যমান প্রতিশ্রুতিগুলি পর্যবেক্ষণযোগ্যতে রূপান্তর করুন।

কেবল কৌণিক কাঠামো নিজেই এবং এর সম্প্রদায়গুলি সমস্ত পর্যবেক্ষণযোগ্য ব্যবহার করছে। সুতরাং যখন আপনি কাঠামো পরিষেবাগুলি বা তৃতীয় পক্ষের মডিউলগুলি একীভূত করবেন এবং সমস্ত কিছু একসাথে শৃঙ্খলিত করবেন তখন এটি উপকারী হবে।


যদিও আমি সমস্ত নিম্নবিত্তদের প্রশংসা করি তবে আমি এখনও উপরে আমার মতামতটি জোর দিয়ে বলি যদি না কেউ কেউ কয়েকটি দৃশ্যের তালিকা তৈরির জন্য যথাযথ মন্তব্য না করে যা আপনার পর্যবেক্ষণের উপরে প্রতিশ্রুতিগুলি ব্যবহার করতে আপনার কৌণিক প্রকল্পে এখনও কার্যকর হতে পারে।

অবশ্যই, কোনও মতামত সব ক্ষেত্রেই 100% সঠিক নয় তবে কমপক্ষে আমি মনে করি যে কৌণিক কাঠামোয় প্রয়োগ করা নিয়মিত বাণিজ্যিক প্রকল্পগুলির জন্য 98% সময়, পর্যবেক্ষণযোগ্য হ'ল সঠিক উপায়।

আপনার সাধারণ শখের প্রকল্পের শুরুতে আপনি এটি পছন্দ না করলেও, আপনি শীঘ্রই কৌণিক ব্যবস্থায় প্রায়শই সমস্ত উপাদান অনুধাবন করতে পারবেন এবং কৌণিক বন্ধুত্বপূর্ণ তৃতীয় পক্ষের কাঠামোর বেশিরভাগই পর্যবেক্ষণগুলি ব্যবহার করছেন এবং তারপরে আপনি আপনার প্রতিশ্রুতি নিয়মিত পর্যবেক্ষণযোগ্য হিসাবে রূপান্তর করে তাদের সাথে যোগাযোগ করার জন্য।

এই উপাদানগুলির মধ্যে অন্তর্ভুক্ত রয়েছে তবে সীমাবদ্ধ নয়: এইচটিপিপি্লিয়েন্ট, ফর্ম নির্মাতা, কৌণিক উপাদান মডিউল / সংলাপ, এনজিআরএক্স স্টোর / এফেক্টস এবং এনজিএক্স-বুটস্ট্র্যাপ।

প্রকৃতপক্ষে, গত 2 বছরে আমি যে অ্যাংুলার ইকো-সিস্টেমটি মোকাবিলা করেছি তার একমাত্র প্রতিশ্রুতি APP_INITIALIZER

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.