码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • async&await函数


    一种更简洁的方式写出基于Promise的异步行为

    async函数的返回值为一个promise,通过then和catch来捕获内部的返回值

    1.特性:

    1. async函数内部会返回一个promise对象,如果看起来不是promise,那么它将会隐式的包装在promise中(如果代码里返回的不是promise对象,会将其包装成promise对象)

    1. async function fn () {
    2.   return 'hello world' 
    3. }

     

    2. await能获取到promise状态改变后的值,如果后面不是一个promise,await 会把该值转换为已正常处理的Promise,结果为undefined

    1. async function fn () {
    2.   await 1 
    3. }

     

    3. await后面promise的状态是reject,则await后的代码不会执行,async函数将返回状态为reject的promise

    1. async function fn() {
    2. await cosle.log("sdf");
    3. console.log(111);
    4. }
    5. console.log(fn());

    4. async函数内部如果存在await,await表达式会暂停整个async函数的执行,等当前位置promise状态改变后才能恢复

    2.面试题分析:

    1. async function fn() {
    2. setTimeout(function () {
    3. console.log(1)
    4. }, 0)
    5. Promise.resolve().then(() => console.log(4))
    6. await setTimeout(function () {
    7. console.log(5)
    8. }, 0)
    9. await Promise.resolve().then(() => console.log(6))
    10. Promise.resolve().then(() => console.log(7))
    11. console.log(3)
    12. }
    13. fn()
    14. //4 6 3 7 1 5

        分析:

    1. 宏任务:setTimeout 1;setTimeout 5
    2.     微任务: 4 6--》7
    3.     1.setTimeout 1会放在宏任务中
    4.     2.Promise.resolve().then(() => console.log(4))会放在微任务中
    5.     3.await setTimeout(function () {
    6.         console.log(5)
    7.       }, 0)
    8.       await后面跟的不是promise对象,会将其转为promise对象,并返回undefined
    9.       所以这段代码等价于:
    10.       await Promise.resolve(setTimeout(function(){ console.log(5) },0) 此时有个定时器,所以会放入宏任务中
    11.     4. await Promise.resolve().then(() => console.log(6)) 执行后会将then后面放入微任务中,
    12.     ***到此同步代码执行完(因为await会等待结果输出后再执行下面代码,所以下面的都不开始执行,而这个微任务在微任务4后面,所以需要先执行4,即打印4,6,
    13.      打印完后,await当前结果输出继续往下,将7设置进微任务
    14.     5.Promise.resolve().then(() => console.log(7))放入微任务中
    15.     6. 打印console.log(3)
    16.     打印完3以后重新执行微任务7,在执行宏任务 1,5
    17.  最后为4,6,3,7,1,5

  • 相关阅读:
    密码安全策略
    大文件RandomAccessFile类来分片传输
    Python使用opencv基于坐标范围批量剪裁(图像)并将剪裁后的图像保存到指定的新文件夹中
    一步一步分析HTTPS加密机制
    mysql8 添加一个用户 并给与所有权限 报错解决
    项目记录:使用SpringBoot + MyBatisPlus 在MySQL字段设置外键后ID自增失效导致添加失败问题(ID生成策略)
    九大装修收纳空间的设计,收藏备用!福州中宅装饰,福州装修
    C Primer Plus(6) 中文版 第7章 C控制语句:分支和跳转 7.3 逻辑运算符
    Spring Cloud(一):Spring Cloud Alibaba 组件 和 版本选择
    Blob把html导出为excel文件
  • 原文地址:https://blog.csdn.net/qq_34569497/article/details/133911252
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号