我有一个非常简单的timeInterval observable,我想在不断开订阅者的情况下启动/停止传输(无论可观察的状态如何,都应该等待和等待).是可能的,如果是这样的话怎么样?
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');
});
Run Code Online (Sandbox Code Playgroud)
一般评论:我见过的大多数例子都展示了如何定义观察者和订阅者.我如何影响现有对象的行为?
use*_*222 16
取决于停止/恢复信号的来源.我能想到的最简单的方法是使用pausable运算符,正如文档所说,运算符更适合热观察.因此,在下面的示例代码中,我删除了take(10)(您的可通信信号现在通过pauser主题),并添加share以将您的observable变为热点.
Run Code Online (Sandbox Code Playgroud)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个项目暂停您的源:
// Helper functions
function emits ( who, who_ ) {return function ( x ) {
who.innerHTML = [who.innerHTML, who_ + " emits " + JSON.stringify(x)].join("\n");
};}
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');
});
Run Code Online (Sandbox Code Playgroud)
你现在应该回答第二个问题.将您给出的可观察量与相关的RxJS运算符相结合,以实现您的用例.这就是我在这里所做的.
| 归档时间: |
|
| 查看次数: |
13678 次 |
| 最近记录: |