function addTo(start, end, step = 1, delay, cb) {
if (start >= end ) {
start = end
cb && cb(start, end)
return
}
return new Promise((resolve, reject) => {
if (delay) {
setTimeout(() => {
cb && cb(start, end)
start = start += step
addTo(start, end, step, delay, cb)
}, delay);
} else {
cb && cb(start, end)
start = start += step
addTo(start, end, step, delay, cb)
}
})
}
// test
addTo(2, 100, 4, null, console.log)



