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);
  });
}

async function run () {
  await sleep(2000);
  a();
  await sleep(3000);
  b();
  await sleep(4000);
  c();
}

run();