Observableとストリーム
Angular6を利用しているとObservableが頻繁に出てきます。しかし、これは比較的イメージしづらいと思われます。
Observableとはバリュー(Value)やイベント(Event)のストリームとよく解説されています。
しかし、ストリームを川の流れのようにイメージすると、その後の理解を阻害する場合があります。
というのは、川は自然に流れ続けるイメージですので、Observableを定義しただけで、その流れが発生していると誤解しがちだからです。
そこでまず、Observableには、Cold ObservableとHot Observableの違いがあることを理解する必要があります。
前者のCold Observableは、定義しただけでは流れは発生しません。
受け手側で、subscribeを実行した時のみ、その流れは発生します。
その一方、Hot Observableでは、受け手側の状況に拘わらず、その流れが発生します。
これは通常の川のイメージと同様です。
こうした違いを明確にしておく必要があります。
ビデオ解説(日本語)
https://youtu.be/WsOqyG3_nnA
ビデオ解説(英語)
https://youtu.be/ufntWfqCJ4g
Cold Observable
まず、Cold Observableについて見てみましょう。
Observableは、イベントやバリューのストリームです。
しかし、Observableを定義しただけでは、まだ流れは発生していません。
それは受け手側、すなわちリスナーが、Subscribeを実行していないからです。
受け手側がFishについてのSubscribeを実行しました。魚が現れてきました。
ここで受け手側が、Unsubscriveを実行しました。魚の流れは消失しました。
Hot Observable
次は、Hot Observableについてです。
Hot Observableの場合は、受け手側の状態、すなわち、Subscribeを実行しているか否かに拘わらず、その流れは発生しています。
この典型的な例は、キーボード・イベントやマウス・イベントです。
ここで受け手側が、Subscribeを実行すると、その情報をほぼ同時に共有することができるようになります。
Reference
-
"Observable",
http://reactivex.io/documentation/observable.html -
"Reactive Programming with RxJS 5: Untangle Your Asynchronous JavaScript Code", 2018/2/15,Sergi Mansilla
https://www.amazon.co.jp/Reactive-Programming-RxJS-Asynchronous-JavaScript/dp/1680502476/ref=sr_1_7?ie=UTF8&qid=1537063252&sr=8-7&keywords=reactive+programming -
"Angular6 から始める RxJS6 入門",
https://qiita.com/MasanobuAkiba/items/a5026bd37603cc29e9e7 -
"Comprehensive Guide to Higher-Order RxJs Mapping Operators: switchMap, mergeMap, concatMap (and exhaustMap)",
https://blog.angular-university.io/rxjs-higher-order-mapping/ -
"Angular 5, Angular 6 Custom Library: Step-by-step guide",
https://www.udemy.com/angular5-custom-library-the-definitive-step-by-step-guide/ -
"Angular 5, Angular 6用 カスタムライブラリの作成: 完全ステップ・バイ・ステップ・ガイド",
https://www.udemy.com/angular5-l/