qq_17255515
盼儿哥
2021-04-29 15:50
采纳率: 50%
浏览 28

请大佬帮忙解释一下执行流程,没有promise我是理解的

console.log('main1')
new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve()
    })
    console.log('promise1')
}).then(() => {
    console.log('promise2')
})

setTimeout(() => {
    console.log('settimeout')
}, 0)
console.log('main2')

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • weixin_53110831
    第一凌 2021-04-29 16:37
    已采纳

    执行次序为同步任务、微任务、宏任务

    resolve、reject是微任务,

    定时器是宏任务。new Promise会立即执行,

    .then函数是Promise示例 resolve之后才会执行。

    你自己看一下吧。。我现在理解得就是这样

    点赞 1 评论
  • weixin_44755573
    rick-lewis 2021-04-29 16:58

    首先执行主程序,输出main1;new Promise的时候,Promise的构造函数会执行(resolve, reject) => {setTimeout(() => {resolve()})console.log('promise1')},并将这个实例的resolve和reject方法注入这个方法,执行setTimeout,浏览器生成一个异步的计时器,输出promise1;往下走,执行then会将里面的函数放入当前实例对应的队列里面(resolve队列或者reject队列),并返回一个新的Promise实例,以便可以继续使用then方法;继续走,又遇到一个setTimeout,继续生成一个计时器;最后输出main2
    然后,计时器时间到后会将回调往宏任务队列里面丢,丢了两个resolve()和console.log('settimeout');先执行resolve(),会执行对应Promise实例里面的resolve队列里面的函数(也就是前面执行then放进去的),这个时候会生成一个微任务,丢到微任务队列里面;到这一步,setTimeout里面的resolve执行完了,因为微任务队列有值,即执行() => {console.log('promise2')},输出promise2;最后执行console.log('settimeout'),输出settimeout。至此程序执行完毕。

    点赞 1 评论
  • weixin_44058725

    https://juejin.cn/post/6844903512845860872  js运行机制了解一下,事件循环,宏任务与微任务

    点赞 评论

相关推荐