Edit in JSFiddle

function loop (len, each, callback) {
  len === 0 ? callback() : loop(0)
  function loop (i) {
    each(function next (error) {
      if (error) return callback(error)
      if (i + 1 === len) return callback()
      loop(i + 1)
    }, i)
  }
}

loop(10, each, function (error) {
  console.log('done, error? ', error)
});
 
function each (next, i) {
  setTimeout(function () {
    console.log(i)
    next()
  }, 1000)
}