Skip to content

Instantly share code, notes, and snippets.

@thcolin
Last active November 3, 2017 23:29
Show Gist options
  • Save thcolin/a56c46a62724a909bb131098e72350ae to your computer and use it in GitHub Desktop.
Save thcolin/a56c46a62724a909bb131098e72350ae to your computer and use it in GitHub Desktop.
Min delay between values in rxjs
import Rx from 'rxjs/Rx'
function delayBetween(delay, first = false){
let past = Date.now()
return this.mergeMap((next, index) => {
const present = Date.now()
const futur = Math.max(past + (index === 0 && !first ? 0 : delay), present)
past = futur
return Rx.Observable.of(next).delay(futur - present)
})
}
Rx.Observable.prototype.delayBetween = delayBetween
// Exemple
const observer = new Rx.Subject()
observer
.delayBetween(1000)
.subscribe(
next => console.log('next', next, Date.now()),
err => console.log('err'),
() => console.log('done')
)
setTimeout(() => {
observer.next(1)
observer.next(1)
observer.next(1)
}, 0E3)
setTimeout(() => {
observer.next(2)
observer.next(2)
observer.next(2)
}, 2E3)
setTimeout(() => {
observer.next(3)
observer.next(3)
observer.next(3)
}, 10E3)
setTimeout(() => {
observer.next(4)
observer.next(4)
observer.next(4)
observer.complete()
}, 20E3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment