0

rxjs 5 を使用して、オブザーバブルをサブスクライブし、最後に発行された値でストリームを開始したいと考えています。演算子 '.cache' はこのために構築されているはずですが (私はそう思います)、動作させることができません。(ボタンをクリックして)オブザーバブルを起動し、3秒後にサブスクライブする小さなテストを行いました。理論的には、購読時にそのクリック放出を取得する必要がありますが、そうではありません。

https://github.com/ReactiveX/RxJS/commit/4308a04

http://codepen.io/BradLee/pen/VaqreL

let btn = document.querySelector(`btn`),
    btn$ = Rx.Observable.fromEvent(btn, `click`)
             .cache(1);

setTimeout(() => { 
    btn$.subscribe(evt => console.log('fired') );
}, 3000);
4

1 に答える 1

1

この問題は RxJS とは関係ありません。次のように変更すると、クエリ セレクタが正しくありません。

let btn = document.querySelector(`btn`),

let btn = document.querySelector('button')

できます。

編集

少なくとも 1 つのサブスクリプションが存在するまでcache、イベントは発行されません。イベントが発生する前からイベントを受信する必要がある場合は、subscribeイベントの受信を開始できるように、即時サブスクリプションを作成する必要があります。

let btn = document.querySelector(`btn`),
    btn$ = Rx.Observable.fromEvent(btn, `click`)
             .cache(1);

btn$.subscribe();

publishReplayまたは、代わりにオペレーターを使用して接続する必要があります。

let btn = document.querySelector(`btn`),
    btn$ = Rx.Observable.fromEvent(btn, `click`)
             .publishReplay(1);

btn$.connect();
于 2016-05-09T16:20:23.697 に答える