function resolveAfter2Seconds() { console.log(new Date().getSeconds()) console.log('starting slow promise') return new Promise(resolve => { setTimeout(() => { resolve('slow') console.log(new Date().getSeconds()) console.log('slow promise is done') }, 2000 ) }) } function resolveAfter1Second() { console.log(new Date().getSeconds()) console.log('starting fast promise') return new Promise(resolve => { setTimeout(() => { resolve('fast') console.log(new Date().getSeconds()) console.log('fast promise is done') }, 1000 ) }) } var sequentialStart = async function() { console.log(new Date().getSeconds()) console.log('==SQUENTIAL START==') // 1. Execution gets here almost instantly const slow = await resolveAfter2Seconds() console.log(new Date().getSeconds()) console.log(slow) const fast = await resolveAfter1Second() console.log(new Date().getSeconds()) console.log(fast) } sequentialStart()
//
28
==SQUENTIAL START==
28
starting slow promise
30
slow promise is done
30
slow
30
starting fast promise
31
fast promise is done
31
fast