熱い対冷たい観測量


オブザーバブルは、ホットとコールドオブザーバブルのようなタイプを持っていません.観測可能であるならば、我々は陽に述べません.熱くて冷たいオブザーバブルは観察可能なものがどのように動作して、購読者(または加入者なしで)に値を放出するかです.
ホットオブザーバブルは、誰も彼らに購読されない場合でも、イベントや値をプッシュします.たとえば、マウスクリックまたは検索バーのKeyupイベントの観測可能性に基づいて観測可能を作成した場合、その値を購読しているかどうかにかかわらず、値を作成し続けることになります.あなたの購読者やオブザーバーは、彼らが購読した瞬間からホットな観測可能な値から値を取得することを心に留めておく必要があります.購読前に発行された値はすべて失われます.
コールドオブザーバブルはサブスクリプションで値を出力するだけです.エンドポイントへのHTTP呼び出しは、コールドオブザーバブルの例です.あなたが購読して、バックエンドから値を得るとき、それは終点を呼びます.冷えた観測の場合は値は見当たらない.また、すべての再購読するたびに行う.
実生活例
あなたが劇場にある映画を見たいと言いましょう、そして、それはNetflixでも流れています.
いつでもNetflixのムービーを見ることができます.あなたが映画を見ることに決めるときはいつでも、あなたは始めからそれを見始めます、そして、あなたは終わりまで完全な映画を見ることができます.それは寒い観察に似ている.
これを4時に同じ映画のショータイムと比較してください.あなたが午後4時に現れないならば、あなたは映画の一部を逃します.あなたは加入者であり、あなたが表示するときに応じて映画の一部を欠場するバインドされています.それは熱い観測可能です.誰かが予約するとき、それは気にかけません.
コード例
あなたが過去のブログ記事で見た冷たい観察可能な例から始めましょう.
import Rx from 'rxjs/Rx';
import { interval } from 'rxjs/observable/interval';
import { take } from 'rxjs/operators';

// create an Observable
// emits sequential values from 0-4 (take first 5)
const observable = Rx.Observable.interval(1000).take(5);

setTimeout(() => {
    observable.subscribe(
        // first subscriber starts in 3 seconds
        value => console.log(`observer A: ${value}`)
    )
}, 3000);

setTimeout(() => {
    observable.subscribe(
        // second subscriber starts in 5 seconds
        value => console.log(`observer B: ${value}`)
    )
}, 5000);
つのサブスクリプションAとBはそれぞれ3と5秒で始まります.それまではobservable は値を生成しません.観測可能AとBは5から4までの5つの値をすべて受け取る.彼らは値を欠落していません.
出力:
observer A: 0
observer A: 1
observer B: 0
observer A: 2
observer B: 1
observer A: 3
observer B: 2
observer A: 4
observer B: 3
observer B: 4
ブランドの新しい例を行うよりも、ホットオブザーバブルを理解するにはinterval 観察可能な熱い観察に.
そのためには、publish メソッド.The publish メソッドは接続可能な観測可能です.接続可能な観測可能なものは、我々がconnect メソッド.
import Rx from 'rxjs/Rx';
import { interval } from 'rxjs/observable/interval';
import { take } from 'rxjs/operators';

// adding publish returns a connectable Observable
// making this a hot Observable
const observable = Rx.Observable.interval(1000).take(5).publish();

setTimeout(() => {
  observable.subscribe(
    value => console.log(`observer A: ${value}`)
  )
}, 3000);

setTimeout(() => {
  observable.subscribe(
    value => console.log(`observer B: ${value}`)
  )
}, 5000);
上記のコードは、私たちがconnect the observable .
import Rx from 'rxjs/Rx';
import { interval } from 'rxjs/observable/interval';
import { take } from 'rxjs/operators';

const observable = Rx.Observable.interval(1000).take(5).publish();

// as soon as we connect it starts producing values
observable.connect();

setTimeout(() => {
  observable.subscribe(
    // observer A starts at 2100 ms so it will lose the first two values
    // it will get 2, 3, 4
    value => console.log(`observer A: ${value}`)
  )
}, 2100);

setTimeout(() => {
  observable.subscribe(
    // observer B starts at 4100 ms so it will lose the first four values
    // it will only get 4 and miss 0 to 3
    value => console.log(`observer B: ${value}`)
  )
}, 4100);
あなたはそれを見ることができますobservable 値の開始connect . オブザーバーAは2.1秒で始まりました.同様に、Observer Bは4.1秒で始まりました.そして、最初の4つの値を逃して、4の最後の値を得るだけです.
observer A: 2
observer A: 3
observer A: 4
observer B: 4