Skip to content

Instantly share code, notes, and snippets.

@tincho
Created December 23, 2019 19:32
Show Gist options
  • Save tincho/02f75e15240e7b24239898dead58d341 to your computer and use it in GitHub Desktop.
Save tincho/02f75e15240e7b24239898dead58d341 to your computer and use it in GitHub Desktop.
simple vainilla JS util to call a function each N milliseconds
const loop = {
timer: null,
count: 0,
start(fn, time=1000, limit = 100) {
fn(this.stop.bind(this), this.count);
this.count++;
if (this.count < limit) {
this.timer = setTimeout(() => this.start(fn, time, limit), time)
} else {
this.stop()
}
},
reset() { this.count = 0 },
stop() {
clearTimeout(this.timer);
this.reset()
}
}
// usage: 
function fn(stop, count) {
console.log(`time: ${count}`)
// if (sth) stop()
}
// default 1000 ms
loop.start(fn)
// each 500 ms
loop.start(fn, 500)
// only 10 times
loop.start(fn, 500, 10)
// also in any moment one can run:
loop.stop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment