Edit in JSFiddle

let delayT = 1000;

function delay(t){
	return function(value){
  	return new Promise((resolve)=>{
    	setTimeout(()=>{
      	resolve(value);
      }, t);
    });
  }
}

setTimeout(()=>{
	let value = '1,';
  console.log('1. value=', value);
	setTimeout(()=>{
  	value += '2,';
    console.log('2. value=', value);
    setTimeout(()=>{
	  	value += '3,';
    	console.log('3. value=', value);
      setTimeout(()=>{
        value += '4,';
        console.log('4. value=', value);
      }, delayT);
  	}, delayT);
  }, delayT);
}, delayT);

let mDelayFunc = delay(delayT);

delay(6000)()
  .then(()=>{
    let value = '1,';
    console.log('promise 1. value=', value);
    return value;
  })
  .then(mDelayFunc)
  .then((v)=>{
  	v += '2,';
    console.log('promise 2. value=', v);
    return v;
  })
  .then(mDelayFunc)
  .then((v)=>{
  	v += '3,';
    console.log('promise 3. value=', v);
    return v;
  })
  .then(mDelayFunc)
  .then((v)=>{
  	v += '4,';
    console.log('promise 4. value=', v);
    return v;
  })