Example 1: Sample source every 2 seconds
( StackBlitz | jsBin | jsFiddle )
// RxJS v6+import { interval } from 'rxjs';import { sample } from 'rxjs/operators';//emit value every 1sconst source = interval(1000);//sample last emitted value from source every 2sconst example = source.pipe(sample(interval(2000)));//output: 2..4..6..8..const subscribe = example.subscribe(val => console.log(val));
Example 2: Sample source when interval emits
( StackBlitz | jsBin | jsFiddle )
// RxJS v6+import { interval, zip, from } from 'rxjs';import { sample } from 'rxjs/operators';const source = zip(//emit 'Joe', 'Frank' and 'Bob' in sequencefrom(['Joe', 'Frank', 'Bob']),//emit value every 2sinterval(2000));//sample last emitted value from source every 2.5sconst example = source.pipe(sample(interval(2500)));//output: ["Joe", 0]...["Frank", 1]...........const subscribe = example.subscribe(val => console.log(val));
Example 3: Distinguish between drag and click
From Stack Overflow By Dorus
( StackBlitz | jsBin | jsFiddle )
// RxJS v6+import { fromEvent, merge } from 'rxjs';import { sample, mapTo } from 'rxjs/operators';const listener = merge(fromEvent(document, 'mousedown').pipe(mapTo(false)),fromEvent(document, 'mousemove').pipe(mapTo(true))).pipe(sample(fromEvent(document, 'mouseup'))).subscribe(isDragging => {console.log('Were you dragging?', isDragging);});
sample 📰 - Official docs
📁 Source Code: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/sample.ts