how can start and stop an interval observable in RXJS?
我有一个非常简单的timeInterval可观察的对象,我想开始/停止传输而不断开订户(无论可观察的状态如何,它都应坐下来等待)。 可能,如果可以,怎么办?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var source = Rx.Observable .interval(500) .timeInterval() .map(function (x) { return x.value + ':' + x.interval; }) .take(10); var subscription = source.subscribe( function (x) { $("#result").append('Next: ' + x + ' '); }, function (err) { $("#result").append('Error: ' + err); }, function () { $("#result").append('Completed'); }); |
一般评论:我看到的大多数示例都显示了如何定义可观察对象和订户。 我如何影响现有对象的行为?
取决于停止/恢复信号的来源。 我能想到的最简单的方法是使用
- 关于热与冷,请看一下图示的各个数据流。
- 在主题上,您还可以查看相应的语义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 var pauser = new Rx.Subject();
var source = Rx.Observable
.interval(500)
.timeInterval()
.map(function (x) { return x.value + ':' + x.interval; })
.share()
.pausable(pauser);
var subscription = source.subscribe(
function (x) {
$("#result").append('Next: ' + x + ' ');
},
function (err) {
$("#result").append('Error: ' + err);
},
function () {
$("#result").append('Completed');
});
// To begin the flow
pauser.onNext(true); // or source.resume();
// To pause the flow at any point
pauser.onNext(false); // or source.pause();
这是一个更复杂的示例,它将每10个项目暂停一次源:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | // Helper functions function emits ( who, who_ ) {return function ( x ) { who.innerHTML = [who.innerHTML, who_ +" emits" + JSON.stringify(x)].join(" "); };} var pauser = new Rx.Subject(); var source = Rx.Observable .interval(500) .timeInterval() .map(function (x) { return x.value + ':' + x.interval; }) .share(); var pausableSource = source .pausable(pauser); source .scan(function (acc, _){return acc+1}, 0) .map(function(counter){return !!(parseInt(counter/10) % 2)}) .do(emits(ta_validation, 'scan')) .subscribe(pauser); var subscription = pausableSource.subscribe( function (x) { $("#ta_result").append('Next: ' + x + ' '); }, function (err) { $("#ta_result").append('Error: ' + err); }, function () { $("#ta_result").append('Completed'); }); |
现在,您应该已经回答了第二个问题。 将您获得的可观察物与相关的RxJS运算符相结合,以实现您的用例。 这就是我在这里所做的。