new Promise((resolve, reject) => {
console.log("1")
resolve()
}).then(
() => {
console.log("2")
new Promise((resolve, reject) => {
console.log("3")
resolve()
}).then(
() => {
console.log("4")
}).then(
() => {
console.log("5")
}).then(
() => {
console.log("6")
}).then(
() => {
console.log("7")
})
}
).then(
() => {
console.log("8")
Promise.resolve()
.then(
() => {
console.log(9)
}).then(
() => {
console.log(10)
})
}).then(
() => {
console.log("11")
}).then(
() => {
console.log("12")
})
// 第二行Promise被创建后自动运行,打印 "1" ,后续执行resolve进入第五行箭头函数
// 第六行打印 "2" ,后续创建新Promise对象
// 第七行Promise被创建后立即执行,代码进入第八行,打印 "3" ,后续执行resovle进入第十一行箭头函数
// 第十二行打印 "4" 完成,没有resolve强制执行下个任务进入同步任务队列,回过头来执行第一个Promise的then函数
// 第二十五行箭头函数执行,打印 "8" ,继而执行Promise.resolve,强行插队回到第二个Promise的第二个then十三行中(第一个then被强制resolve)
// 第十四行箭头函数执行,打印 "5" ,回到原始队列,继续执行第一个Promise,代码进入二十八行
// 第二十九行箭头函数执行,打印 "9",第二十四行到三十四行内为第一个Promise的一个then行为,没有resolve,下个任务继而计入同步队列,执行三十五行的下一个then
// 第三十六行箭头函数执行,打印 "11" ,进行下一个异步前需要清空同步队列,现在在同步队列中的任务有第十六行和第二十四行
// 根据同步队列顺序,第十六行then方法先执行,执行十七行箭头函数,打印 "6" ,然后没有resolve强制执行下个任务进入同步队列
// 继续根据同步队列顺序第二十四行then继续执行,前部分已完成,直接进入第三十一行,第三十二行执行箭头函数,打印 "10" ,该同步队列清空,继续下一个异步
// 第三十九行箭头函数执行,打印 "12",进行下一个异步前摇清空同步队列,同步队列中还剩十九行
// 根据同步队列顺序,第二十行箭头函数执行,打印 "7",同步队列完成清空
// 进入下一个异步,Promise闭合,异步队列完成清空,函数执行完毕
// 故函数打印顺序为 1->2->3->4->8->5->9->11->6->10->12->7