Edit in JSFiddle

// 開始から2秒後にa、aの3秒後にb、bの4秒後にcを実行する

const a = function () { console.log('a') };
const b = function () { console.log('b') };
const c = function () { console.log('c') };

function sleep (time) {
  return new Promise(function (resolve, reject) {
    window.setTimeout(resolve, time);
  });
}

sleep(2000).then(function () {
  a();
  sleep(3000).then(function () {
    b();
    sleep(4000).then(function () {
      c();
    })
  });
});