JavaScript的异步编程async、await

2023-11-01

1、async关键字

  先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行。 例如:

async function timeout() {
    return 'hello world';
}

  语法很简单,就是在函数前面加上async 关键字,来表示它是异步的,那怎么调用呢?async 函数也是函数,平时我们怎么使用函数就怎么使用它,直接加括号调用就可以了,为了表示它没有阻塞它后面代码的执行,我们在async 函数调用之后加一句console.log;

 async function timeout() {
    return 'hello world'
}
timeout();
console.log('虽然在后面,但是我先执行');

  async 函数返回的是一个promise 对象,如果要获取到promise 返回值,我们应该用then 方法

async function timeout() {
    return 'hello world'
    }
    timeout().then(result => {
    console.log(result);
})
console.log('虽然在后面,但是我先执行');

2、await关键字

  await 关键字,await是等待的意思,那么它等待什么呢,它后面跟着什么呢?其实它后面可以放任何表达式,不过我们更多的是放一个返回promise 对象的表达式。注意await 关键字只能放到async 函数里面

function timeout(ms) {
    return new Promise((resolve, reject) ={
       setTimeout(resolve, ms, "finish");
    });
}
async function asyncTimeSys(){
    await timeout(1000);
    console.log("第一层异步结束!")
    await timeout(1000);
    console.log("第二层异步结束!")
    await timeout(1000);
    console.log("第三层异步结束!")
    await timeout(1000);
    console.log("第四层异步结束!")
    await timeout(1000);
    console.log("第五层异步结束!")
    return "all finish";
}
 asyncTimeSys().then((value)=>{
    console.log(value);
});

  现在我们看看代码的执行过程,asyncTimeSys 函数,它里面遇到了await, await 表示等一下,代码就暂停到这里,不再向下执行了,它等什么呢?等后面的promise对象执行完毕,然后拿到promise resolve 的值并进行返回,返回值拿到之后,它继续向下执行。具体到 我们的代码, 遇到await 之后,代码就暂停执行了, 等待timeout(1000) 执行完毕

代码输出:

第一层异步结束!
第二层异步结束!
第三层异步结束!
第四层异步结束!
第五层异步结束!
all finish

  总结一下,async/await就是为了解决异步回调而生的,它可以让你的异步代码写的像同步的一样具有良好的可读性.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript的异步编程async、await 的相关文章

随机推荐

  • 服务器dbback文件夹,怎么让SQL 2000定时复制备份数据库到局域网中的指定电脑上? - SQL Server论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    如题 这是我在网上找的JOB脚本 试用只能在本地盘符间复制有效 局域网中的共享失效 系统环境 WIN2K3 SQL 2000 SP4 网络环境 SQL服务器 192 168 1 2 备份服务器 192 168 1 3 在备份服务器上新建共享
  • Java 动态代理和静态代理 详解(结合代码实列)

    文章目录 Java 动态代理和静态代理的区别 下面是一个结合代码示例 运行上述代码 输出如下 总结 Java 动态代理和静态代理的区别 动态代理和静态代理是两种不同的代理模式 它们在代理对象的创建和使用方式上有所不同 静态代理 静态代理是在
  • 【期末大作业】语料库--分类、聚类、关系提取

    一 课程要求以及说明 1 使用分类 聚类 关系提取对数据集进行相关的分析 在使用数据集之前 需要用到数据预处理 2 可以在以下方法中选择一种聚类和一种分类技术 聚类 无监督学习 C1 network analysis 网络分析 C2 k m
  • lnmp环境搭建的详细过程(ubuntu22)

    软件及软件版本的信息如下 nginx 1 18 0 mysql 8 0 32 php 8 1 备注 我的ubuntu环境是Windows下基于WSL2的Ubuntu 想看怎么实现的可以看这个文章 https blog csdn net qq
  • CVE-2021-4034 Polkit

    CVE 2021 4034 Polkit 0x01 漏洞介绍 Polkit是一个应用程序级别的工具集 通过定义和审核权限规则 实现不同优先级进程间的通讯 控制决策集中在统一的框架之中 决定低优先级进程是否有权访问高优先级进程 另外Polki
  • 熔断,降级,限流的区别

    熔断 降级 限流 熔断 Circuit Breaking 限流 Rate Limiting 降级 Fallback 熔断 Circuit Breaking 一种用于处理依赖服务故障的策略 当依赖服务出现故障或超时 熔断机制会迅速中断对该服务
  • 【测试设计】使用jenkins 插件Allure生成自动化测试报告

    前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告 后来也尝试过用Python的PyH模块自己构建测试报告 在后来看到了RobotFramework的测试报告 感觉之前用的测试报告都太简陋 它才是测试报告应该有的
  • 基于SSM + MySql + LayUI的图书管理系统

    点击下载 图书管理系统 文件大小 72M 操作系统 Windows10旗舰版 数据库 MySQL5 7 BookManageSystemLayui src main resources sql 开发工具 idea2021 JDK8 Mave
  • web前端进阶大厂面试资料合集

    最近整理了下web前端面试的资料 包含了web前端 数据结构和算法 计算机基础 版本控制工具 经验分享 视频课程和面试书籍等资料 还有比这更全的没有 废话不多说 直接上干货 欢迎收藏 不用客气 前端 面试官求你别再问我hook了 程序员必须
  • Wing IDE安装与破解方法

    WingIDE的licese破解方法 1 安装WingIDE成功后启动 激活时输入license id CN123 12345 12345 12345 2 点击Continue后弹框 拷贝框中的request code 将其放入脚本中的Re
  • 获取微信小程序登录code和获取手机号code

    index ts 获取应用实例 const app getApp
  • QT自定义槽方法

    本文简介点击窗体上的按钮后 改变窗体标题的方法 在窗体上放置好按钮之后 有以下三步操作 声明 gt 实现 gt 连接 1 声明 在头文件mainwindow h中声明一个槽 private slots void changeTitleSlo
  • pychar常用快捷键及转义符号

    Alt 1 影藏和显示项目列表 Ctrl shift F10 运行代码 Ctrl shift F4 关闭Tab 终端运行面板 Ctrl 注释代码 取消注释 Ctrl d 复制行 Ctrl L 格式化代码 PEP8编码格式 shift Alt
  • CGridCtrl(集成了打印预览与合并单元格)

    ucogrid src zip
  • 算法图解part5:散列表

    算法图解part5 散列表 1 散列 hashing 函数 2 散列表的应用 2 1将散列表用于查找 2 2防止重复 2 3用于缓存 3 冲突 4 性能 4 1填装因子 4 2良好的散列函数 5 总结 6 参考资料 1 散列 hashing
  • python图像处理opencv_Python+OpenCV图像处理——图像二值化的实现

    简介 图像二值化就是将图像上的像素点的灰度值设置为0或255 也就是将整个图像呈现出明显的黑白效果的过程 普通图像二值化 代码如下 import cv2 as cv import numpy as np 全局阈值 def threshold
  • 【深度学习系列】——神经网络的可视化解释

    这是深度学习系列的第三篇文章 欢迎关注原创公众号 计算机视觉联盟 第一时间阅读我的原创 回复 西瓜书手推笔记 还可获取我的机器学习纯手推笔记 深度学习系列 深度学习系列 深度学习简介 深度学习系列 梯度下降算法的可视化解释 动量 AdaGr
  • java面经——基础篇(1)

    目录 1 抽象类和接口有什么区别 2 静态变量和实例变量的区别 3 Integer 和 int 的区别 4 装箱和拆箱的区别 5 JDK JRE JVM 三者之间的关系 6 重载和重写的区别 7 Java 中是否可以重写一个 private
  • Java循环结构的嵌套-day11

    循环结构的嵌套 循环结构的嵌套是指一个循环体内又包含另一个循环结构 嵌套在内部的循环体中还可以嵌套循环结构 这就构成了多重循环 但嵌套的层数建议不要过多 嵌套层数过多会使程序变得难以读懂 常用的3种循环嵌套结构 带条件的循环结构 概念 在多
  • JavaScript的异步编程async、await

    1 async关键字 先说一下async的用法 它作为一个关键字放到函数前面 用于表示函数是一个异步函数 因为async就是异步的意思 异步函数也就意味着该函数的执行不会阻塞后面代码的执行 例如 async function timeout