Rx 云々を見かけるたびに Web でそんな出番ないような…?非同期やすとりーむや配列的なのをよろしくするやつ?と、もはや知ることを放棄していて。今頃もったいないなーと思ったので、改めてちょっと調べるの巻。
Rx について
オブザーバーパターンを拡張したもので、シーケンスなデータやイベントをサポートするため、スレッドやノンブロックIOとかを抽象化して組み立てることができる。オブザーバーパターン = 監視する人と通知する人がいるよー、というイメージでとりあえずはよい。
Promise について
非同期処理を上手くパターン化して書くための、統一的なインターフェース。ここではオブザーバーという話はない。 コードを見ても、非同期を取りまわすためのいい感じのインターフェースである、というイメージ(個人の感想です)
Rx とPromise はどう使い分けるとよさそう?
いくつかサイトを眺めてみて。
JavaScriptの非同期処理には何を使うべきか - Qiita State, Promise & Reactive プログラミング What are the differences between observables and promises in JavaScript? - Stack Overflow
で、 Stackoverflow の回答が結構それっぽいのかなあと。
Simply put: A promise resolves to a single value asynchronously, an observable resolves to (or emits) multiple values asynchronously (over time).
ざっくり訳すと。
Observable (= Rx として) は多数の非同期を継続的に処理したい Promise は単発の非同期処理をしたい
なので。
Rx は配列操作とか、画面操作とか、とかと相性がよい Promise は単発になりがちのもの、外部呼出し(Ajaxとか)と相性がよい
このボタンおしたら Ajax して、待機状態にして、結果が来たらここを書き換えて、イベント設定して、… なんてものは Rx と Promise を組み合わせるといいのかもしれない。が、昨今のフロントエンドにおいては Flux なんかでライブラリの中でよろしくやっていることが多いので、あえて開発する人が関与していくことは少ない…?
どちらかというとアプリ系で Rx が盛り上がってる気がしていて、 Web フロントではそうでもないような…。どっちも知識薄くてわからんのだけど、言語が違っても画面とロジック、裏でデータがほいほい、みたいなことってどちらも一緒のことだと思うんだけど、その差はなんなんなん?