请大佬帮忙解释一下执行流程,没有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')

 

 

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

resolve、reject是微任务,

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

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

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

首先执行主程序,输出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。至此程序执行完毕。

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