0

使用 rxjs 5,我想订阅一个 observable 并以最后一个发出的值开始流。运营商 '.cache' 应该为此而建(我认为),但我无法让它工作。我做了一个小测试,触发一个 observable(通过单击一个按钮),然后在 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')

有用。

编辑

在至少有一个订阅之前,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 回答