我不明白以下文档在RxJS example中的含义。有人可以回答吗?
结果是
switched
本质上是一个重启的计时器 每次点击。旧点击的间隔Observables没有 合并当前区间Observable。
以下是代码:
var clicks = Rx.Observable.fromEvent(document, 'click');
// Each click event is mapped to an Observable that ticks every second
var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));
var switched = higherOrder.switch();
// The outcome is that `switched` is essentially a timer that restarts
// on every click. The interval Observables from older clicks do not merge
// with the current interval Observable.
switched.subscribe(x => console.log(x));
答案 0 :(得分:7)
要了解切换的最简单模型是autocomplete
。
在典型的自动完成方案中,您将从用户处获取输入,并调用返回承诺的服务。然后,您可以通过.then()
附加到承诺来更新您的用户界面。
function onChange(text: string) {
this.request(url).then((data) => this.updateListBox(data))
}
如果用户多次输入文字,您每次都会拨打onChange
。此时的回复顺序未得到保证。您正在调用的端点可以很好地将您的响应无序返回。 1
,3
,2
。因此,用户将看到他们做出的第二个请求,而不是他们做出的最后一个请求。
现在切换器的作用是给定一个输入可观察的,它只会主动侦听发送给它的最后一个observable。例如......
this.onChange
.map(text => Observable.fromPromise(this.request(text))
.switch()
.subscribe((data) => this.updateListBox(data));
每次通过onChange
输入值时,我们仍会按正常情况提出请求。第二个值从onChange
我们unsubscribe
从第一个observable(请求1)发出。并订阅第二个observable(请求2)。
因此,一旦您更新了UI,您就只能使用您关注的最新数据集进行更新。