2016-05-06 8 views
0

rxjs 5を使用して、観測可能なものを購読し、最後に放出された値でストリームを開始します。演算子 '.cache'はこれのために構築されているはずですが(私は思いますが)動作させることはできません。私は観察可能な(ボタンをクリックすることにより)発火し、3秒後にそれを購読する小さなテストを行った。理論的には、サブスクリプション時にそのクリックエミッションを取得する必要がありますが、私はそうしません。rxjs5サブスクリプション時に最後に放出された値を取得

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); 

答えて

1

問題がRxJSとは関係ありません。あなたが変更した場合、クエリセレクタは、間違っています:

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

let btn = document.querySelector('button') 

にそれは動作します。 cacheと、少なくとも1つのサブスクリプションがあるまで

編集

それはどんなイベントを発行しません。 subscribeが発生する前にイベントを受信する必要がある場合は、イベントの受信を開始できるように即時サブスクリプションを作成する必要があります。

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

btn$.subscribe(); 

それともpublishReplay演算子を使用し、代わりにそれに接続する必要があります。問題だったが、それはrxjs問題を解決していません

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

btn$.connect(); 
+0

。 3秒タイマーが起動する前にボタンをクリックすると、タイマーが起動したときにコンソールメッセージが表示されますが、表示されません。 –

+0

これは予想される動作です。あなたは 'Observable'にまだ購読していないので、まだイベントを受け取ることはできません。私はそれを解決するためにも編集しました。 – paulpdaniels

関連する問題