栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

下文Promise的执行顺序是怎样的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

下文Promise的执行顺序是怎样的?

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385631.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号