won*_*rld 2 switch-statement rxjs5
结果是
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));
Run Code Online (Sandbox Code Playgroud)
最容易理解开关的模型是autocomplete.
在典型的自动完成方案中,您将从用户获取输入,并调用返回承诺的服务.然后,您可以通过.then()更新UI来附加承诺.
function onChange(text: string) {
this.request(url).then((data) => this.updateListBox(data))
}
Run Code Online (Sandbox Code Playgroud)
如果用户多次输入文本,您onChange每次都会调用.此时的回复顺序未得到保证.您正在调用的端点可以很好地将您的响应无序返回. 1,3,2.因此,用户将看到他们做出的第二个请求,而不是他们做出的最后一个请求.
现在,切换所做的是一个输入可观察的,它只会主动监听发送给它的最后一个observable.例如...
this.onChange
.map(text => Observable.fromPromise(this.request(text))
.switch()
.subscribe((data) => this.updateListBox(data));
Run Code Online (Sandbox Code Playgroud)
每次进入价值时,onChange我们仍会按正常情况提出请求.一旦第二值从发射onChange我们unsubscribe从第一观察到的(请求1).并订阅第二个observable(请求2).
因此,一旦更新UI,您就只能使用您关心的最新数据集进行更新.