如何在RX主题上定义运算符?我希望能够在不更改原始源流的情况下限制/获取/去抖数据流。香港专业教育学院尝试了以下(破碎)实施。任何帮助表示感谢。
var source = Rx.Observable.interval(1000).take(10);
var subject = new Rx.Subject();
source.subscribe(subject);
var subscriber1 = subject.subscribe(
function (x) { $("#result1").append('next: ' + x + '<br>'); },
function (e) { $("#result1").append('onError: ' + e.message); },
function () { $("#result1").append('onCompleted'); });
var modified = new Rx.Subject().take(2); // ... or throttle, or debounce etc
source.subscribe(modified);
var subscriber2 = modified.subscribe(
function (x) { $("#result2").append('next: ' + x + '<br>'); },
function (e) { $("#result2").append('onError: ' + e.message); },
function () { $("#result2").append('onCompleted'); });
答案 0 :(得分:1)
您可以查看What are the semantics of different RxJS subjects?以获取有关主题的一些额外信息。
主题是可观察的,因此您可以使用与可观察对象相同的运算符。主题是观察者,因此您可以订阅他们的来源。
代码中出现的问题是以下var modified = new Rx.Subject().take(2); source.subscribe(modified);
modified
不再是主题,它只是一个常规的可观察对象,所以你不能订阅它来源,你只能订阅一个观察者来源。
做类似的事情:
var newS = new Rx.Subject();
source.subscribe(newS);
var subscriber2 = newS.take(2).subscribe(
function (x) { $("#result2").append('next: ' + x + '<br>'); },
function (e) { $("#result2").append('onError: ' + e.message); },
function () { $("#result2").append('onCompleted'); });