是一个关于执行循序的问题

是一个关于执行循序的问题

async function async1() {
    console.log('async1 start')
    await async2()
    console.log('async1 end')
}
async function async2() {
    new Promise(function (resolve) {
        console.log("promise 1")
        resolve()
    }).then(function () {
        console.log('promise 2')
    })
}
console.log('script start')
setTimeout(() => {
    console.log('setTimeout')
}, 0)
async1()
new Promise(function (resolve) {
    console.log("promise 3")
    resolve()
}).then(function () {
    console.log('promise 4')
})
console.log('script end')

运行之后 打印出来的
script start
async1 start
promise 1
promise 3
script end
promise 2
async1 end
promise 4
setTimeout


我不明白的的点就是在于 打印了promise1之后 除了.then 加入了微任务 
然后执行的为什么不是async1() 函数里的 async1 end 
而是打印了下一个Promise的立即执行里面promise 3等等其他的任务
  await 是等待这个async2函数彻彻底底的运行完毕(宏任务和微任务全部执行)才会执行后面的嘛?

还请大佬指点迷津

await 就是等待回调再往后走,异步函数的同步写法。所以会先执行宏任务,在会去走他

因为在promise 当中,被await 修饰的方法种,如果没有返回值,而是一个表达式,则相当于同步方法,进去方法执行,但是,此await方法后的表达式将作为微任务执行,也是是代码中,先将promise 2压入微任务,再将async end 压入微任务,所以输出的顺序是promise 2 . async end