JSFiddle - React, Tailwind, and code Playground
by lid0
HTML
interval using timeout for async using await to block
<pre>
(func, ms, immediate = true) => {
let timeout = null,
done = false;
const stop = () => {
if(!done){
clearTimeout(timeout);
done = true
}
};
async function body () {
await func();
if(!done) {
timeout = setTimeout(body, ms)
}
}
if(immediate) {
body()
} else {
timeout = setTimeout(body, ms)
}
return {stop};
};
</pre>
JavaScript
var doInterval = (func, ms, immediate = true) => {
let timeout, done;
const stop = () => {
if (done) return
clearTimeout(timeout);
done = true
};
async function body() {
await func();
!done ? timeout = setTimeout(body, ms) : null;
}
if (immediate) {
body();
} else {
timeout = setTimeout(body, ms);
}
return {
stop
};
};
let {stop} = doInterval(() => {
console.log("AAA")
}, 1000, true)
setTimeout(stop, 5000)