关于async await 等任务队列插话

本文详细探讨了JavaScript中的异步操作,通过一个代码示例解释了async/await的执行顺序,涉及到宏任务、微任务的概念,以及setTimeout和Promise在执行流程中的角色。理解这些概念对于优化JavaScript代码和提升程序性能至关重要。
摘要由CSDN通过智能技术生成

关于async await 等任务队列插话

先上代码吧

在这里插入图片描述
大佬们不妨先猜一下执行顺序:
根据从上而下执行顺序
第一步:执行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‘;(哎哟,累了)

升下级吧

在这里插入图片描述
怎么了??换了个小姐姐就慌了??尽管人家比上一个性感,额么么,扯远了

  1. 第一步 傻了??从上往下走呗,打印出 ‘script start’;
    遇到setTimeout了 这是宏任务 先放起来 这丈母娘不好对付呀 先绕开她
    执行async1 打印 ’async1 start‘还有’await 之前’;
    继续往下啊
    执行 async2 打印‘async2’ ,别走啊哥哥,Promise同步代码啊
    打印出’2222222’
    奶奶的,又await 跳出来 当前在async1函数小姐姐家里
    async1前面也有await 再跳出来(让我多待一会儿不行?吃醋了?)
    继续往下走 执行Promise 打印‘promise1;遇到.then 微任务 放起来
    打印’script end‘
    第一次完事儿了(3秒真男人)
  2. 第二步 根据从上而下 咱刚刚的await 继续走 嗯??啊 这
    返回了Promise对象啊 await相当于执行.then啊 .then属于啥来着? 微任务啊 放起来
    然后执行下一个微任务 打印出’promise2’
    执行完了
  3. 第三步再执行刚才的微任务
    打印出str ‘4444’;
    继续往下走 ’async1 end‘
    awiat下面的代码一般都是等着await后面执行完毕后再执行滴
    好了 万事俱备 只欠东风
    async1执行完了
    继续往下走 打印’promise3’
    .then 微任务 先放起来 执行后面的
  4. 第四步后面同步代码没有了哇 再执行微任务
    打印‘promise4’(对不起啊,我来晚了)
  5. 第五步同步代码跟微任务都执行完了 剩宏任务了
    setTimeout丈母娘 ,我带着诚意来了(开着大奔,好多money,还有给丈母娘准备的礼物,当然岳父大人也有)
    打印’setTimeou‘ (吖,行吧行吧,看你这么有诚意,我就把我女儿许给你了,待她好点儿啊)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值