const timeout = ms => new Promise((resolve, reject) => setTimeout(() => resolve(), ms)) const start = (ctx) => { return timeout(ctx.timer).then(() => { return start(ctx) }).catch(e => { return start(ctx) }) } const main = () => start({timer:0}) main() const timeout = ms => new Promise((resolve, reject) => setTimeout(() => resolve(), ms)) const start = ctx => { timeout(ctx.timer).then(() => { start