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