[解決済み] RxJS:Observableを「手動で」更新するにはどうしたらいいですか?
2022-04-25 01:01:10
質問
私の考えでは、これはobservableの最も基本的なケースのはずなのですが、ドキュメントを読んでもどうすればいいのかわかりません。
基本的には、こんなことができるようになりたいです。
// create a dummy observable, which I would update manually
var eventObservable = rx.Observable.create(function(observer){});
var observer = eventObservable.subscribe(
function(x){
console.log('next: ' + x);
}
...
var my_function = function(){
eventObservable.push('foo');
//'push' adds an event to the datastream, the observer gets it and prints
// next: foo
}
しかし、私は、このようなメソッドを見つけることができませんでした。
push
. 私はこれをクリック・ハンドラに使っているのですが、彼らには
Observable.fromEvent
が、Reactで使おうとしているので、全く別のイベント処理システムを使うのではなく、単純にコールバックでデータストリームを更新できるようにしたいのです。だから、基本的に私はこれをしたい。
$( "#target" ).click(function(e) {
eventObservable.push(e.target.text());
});
最も近いのは
observer.onNext('foo')
しかし、それは実際には機能しないように思えたし、オブザーバーで呼び出されているので、正しいとは思えません。オブザーバーはデータストリームに反応するものであって、それを変更するものではありませんよね?
私がオブザーバーとオブザーバブルの関係を理解していないだけなのでしょうか?
どのように解決するのですか?
RXでは、ObserverとObservableは別個のエンティティです。オブザーバーは、オブザーバブルを購読します。Observableは、Observerのメソッドを呼び出すことで、そのObserverにアイテムを発行します。のスコープ外でオブザーバのメソッドを呼び出す必要がある場合、そのオブザーバは
Observable.create()
を使用することができます。これは、オブザーバとObservableを同時に動作させるプロキシである。
このようにできます。
var eventStream = new Rx.Subject();
var subscription = eventStream.subscribe(
function (x) {
console.log('Next: ' + x);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
});
var my_function = function() {
eventStream.next('foo');
}
被写体については、こちらで詳しく解説しています。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン