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 (gen, time) {
  window.setTimeout(function () {
    gen.next();
  }, time);
}

const generator = function * () {
  yield sleep(generator, 2000);
  a();
  yield sleep(generator, 3000);
  b();
  yield sleep(generator, 4000);
  c();
}();

generator.next();