new Promise((resolve, reject) => { resolve(); }) .then(() => { console.log('outer tick0'); new Promise((resolve, reject) => { resolve(); }) .then(() => { console.log('inner tick0'); return Promise.resolve(); }) .then(() => { console.log('inner tick1'); }) }) .then(() => { console.log('outer tick1'); }) .then(() => { console.log('outer tick2'); }) .then(() => { console.log('outer tick3'); }) .then(() => { console.log('outer tick4'); }) // out put // outer tick0 // inner tick0 // outer tick1 // outer tick2 // outer tick3 // inner tick1 //outer tick4 // my question is why return Promise.resove() takes 3 micktick ?