先上代码吧
大佬们不妨先猜一下执行顺序:
根据从上而下执行顺序
第一步:执行test( ) 调用test
打印出 ‘test start…’
然后继续往下执行 调用testSometing
打印出 ‘执行testSometing’
await 跳出当前堆栈
继续往下走吧。。。
执行promise 打印出’promise start…’
promise.then属于微任务 咱先放起来
然后再往下执行 ‘test end…’
好了 第一次调用堆栈执行玩咯
第二步:根据顺序该咱刚刚 的 await咯
然后打印出v1 testSometing’;
然后往下走 调用testAaync
打印出 ‘执行testAsync’
await 跳出当前堆栈(等会儿记得回来哦)
然后执行刚才那个微任务(快点啊,怎么还不来?)
打印出 ‘promise’;
好了 第二波儿执行堆栈完事儿了 (这就完事儿了??)
第三步 别忘了还有await小妹妹等着呐
继续走吧,总不能丢下人家不管吧 打印出V2 ’hello async‘;
然后再执行最后的 打印 ’testSometing hello async‘;(哎哟,累了)
升下级吧
怎么了??换了个小姐姐就慌了??尽管人家比上一个性感,额么么,扯远了
- 第一步 傻了??从上往下走呗,打印出 ‘script start’;
遇到setTimeout了 这是宏任务 先放起来 这丈母娘不好对付呀 先绕开她
执行async1 打印 ’async1 start‘还有’await 之前’;
继续往下啊
执行 async2 打印‘async2’ ,别走啊哥哥,Promise同步代码啊
打印出’2222222’
奶奶的,又await 跳出来 当前在async1函数小姐姐家里
async1前面也有await 再跳出来(让我多待一会儿不行?吃醋了?)
继续往下走 执行Promise 打印‘promise1;遇到.then 微任务 放起来
打印’script end‘
第一次完事儿了(3秒真男人) - 第二步 根据从上而下 咱刚刚的await 继续走 嗯??啊 这
返回了Promise对象啊 await相当于执行.then啊 .then属于啥来着? 微任务啊 放起来
然后执行下一个微任务 打印出’promise2’
执行完了 - 第三步再执行刚才的微任务
打印出str ‘4444’;
继续往下走 ’async1 end‘
awiat下面的代码一般都是等着await后面执行完毕后再执行滴
好了 万事俱备 只欠东风
async1执行完了
继续往下走 打印’promise3’
.then 微任务 先放起来 执行后面的 - 第四步后面同步代码没有了哇 再执行微任务
打印‘promise4’(对不起啊,我来晚了) - 第五步同步代码跟微任务都执行完了 剩宏任务了
setTimeout丈母娘 ,我带着诚意来了(开着大奔,好多money,还有给丈母娘准备的礼物,当然岳父大人也有)
打印’setTimeou‘ (吖,行吧行吧,看你这么有诚意,我就把我女儿许给你了,待她好点儿啊)