这个RxJS示例中的switch语句有什么作用?

时间:2017-03-31 19:09:02

标签: switch-statement rxjs5

我不明白以下文档在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));

1 个答案:

答案 0 :(得分:7)

要了解切换的最简单模型是autocomplete

在典型的自动完成方案中,您将从用户处获取输入,并调用返回承诺的服务。然后,您可以通过.then()附加到承诺来更新您的用户界面。

function onChange(text: string) {
    this.request(url).then((data) => this.updateListBox(data))
}

如果用户多次输入文字,您每次都会拨打onChange。此时的回复顺序未得到保证。您正在调用的端点可以很好地将您的响应无序返回。 132。因此,用户将看到他们做出的第二个请求,而不是他们做出的最后一个请求。

现在切换器的作用是给定一个输入可观察的,它只会主动侦听发送给它的最后一个observable。例如......

this.onChange
   .map(text => Observable.fromPromise(this.request(text))
   .switch()
   .subscribe((data) => this.updateListBox(data));

每次通过onChange输入值时,我们仍会按正常情况提出请求。第二个值从onChange我们unsubscribe从第一个observable(请求1)发出。并订阅第二个observable(请求2)。

因此,一旦您更新了UI,您就只能使用您关注的最新数据集进行更新。