rxjs中sample和throttle的区别

Difference between sample and throttle in rxjs

我想我没有正确理解 samplethrottle 之间的区别。

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-sample

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-throttle

它们都是用来让observable静音的。 Sample 使用 notifier 发出值,throttle 使用函数来确定它应该忽略值多长时间?

对吗?

Throttle 忽略时间间隔内的所有事件。因此,如果您的通知程序发出事件,则来自源的所有先前事件都将被忽略(并删除)。

采样 returns 自上次采样以来的最后一个事件。因此,如果通知程序发出事件,它将从源事件中查找上次采样的最新事件。

在下面的例子中:

//emit value every 1 second
const source = Rx.Observable.interval(1000);

油门:

//throttle for 2 seconds, emit latest value
const throttle = source.throttle(val => Rx.Observable.interval(2000));
//output: 0...3...6...9
throttle.subscribe(val => console.log(val));

样本:

//sample last emitted value from source every 2s 
const sample = source.sample(Rx.Observable.interval(2000));
//output: 2..4..6..8..
sample.subscribe(val => console.log(val));

如您所见,Sample 获取了最新发出的事件 (0, 2,...),而 Throttle 关闭了流 2 秒并等待下一个事件将被发射(0、3、6、...)。