Это было показано на занятии 17.10.2017
    

//чтобы сделать промис таким способом, вам нужен node

//node -v
//8.7.0

const proSetTimeout = require('util').promisify(setTimeout);
    

void setTimeout( ()=>console.timeEnd('S')  ,3000)

//БЫЛО:
console.time('S')||void setTimeout(()=>console.timeEnd('S'),7000);
//СТАЛО:
//callback HELLLLL!!!
console.time('S')||void setTimeout( ()=>void setTimeout( ()=>console.timeEnd('S')  ,3000)  ,7000);
//т.е. внутрь скобок помещается то, что раньше было без скобок -и так до бесконечности


    

console.time('S')||void proSetTimeout(7000).then( ()=>proSetTimeout(3000) ).then(()=>console.timeEnd('S'));

//после второго шага - после второго then можно уже просто копировать и вставлять 

console.time('S')||void proSetTimeout(7000).then( ()=>proSetTimeout(3000) ).then( ()=>proSetTimeout(5000) ).then(()=>console.timeEnd('S'))

    


//сама замечатальная современная форма

(async()=>{
   console.time('S');
   await proSetTimeout(7000);
   await proSetTimeout(3000);
   await proSetTimeout(5000);
   console.timeEnd('S')
})();
    
PDF

//см. также https://kodaktor.ru/g/promisify  https://kodaktor.ru/g/callback2 https://www.npmjs.com/package/timerpromise

const pr=x=>new Promise(res=>setTimeout(()=>res(),x));
const pr = require('util').promisify(setTimeout);

//эквивалентно

(async()=>{  console.time('S');  await pr(4000); await pr(3000);  console.timeEnd('S')  })();
// Promise { ≺pending> } ..... S: 7011.990ms