JS中的async/await的用法和理解

2023-11-07

1、首先需要理解async 和 await的基本含义

   async 是一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数

// 0. async基础用法测试

async function fun0() {
    console.log(1)
    return 1
}

fun0().then( x => { console.log(x) })  //  输出结果 1, 1,


async function funa() {
    console.log('a')
    return 'a'
}

funa().then( x => { console.log(x) })  //  输出结果a, a,


async function funo() {
    console.log({})
    return {}
}

funo().then( x => { console.log(x) })   // 输出结果 {}  {}

async function funp() {
    console.log('Promise')
    return new Promise(function(resolve, reject){
        resolve('Promise')
    })
}

funp().then( x => { console.log(x) })   // 输出promise  promise

复制代码

await 也是一个修饰符,

await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Promise中返回的内容, 获取的是Promise函数中resolve或者reject的值
// 如果await 后面并不是一个Promise的返回值,则会按照同步程序返回值处理

复制代码

//  await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Promise中返回的内容, 获取的是Promise函数中resolve或者reject的值
// 如果await 后面并不是一个Promise的返回值,则会按照同步程序返回值处理,为undefined
const bbb = function(){ return 'string'}

async function funAsy() {
   const a = await 1
   const b = await new Promise((resolve, reject)=>{
        setTimeout(function(){
           resolve('time')
        }, 3000)
   })
   const c = await bbb()
   console.log(a, b, c)
}

funAsy()  //  运行结果是 3秒钟之后 ,输出 1, time , string,

复制代码

复制代码

// 2.如果不使用promise的方法的话

function log2(time) {
   setTimeout(function(){
       console.log(time)
       return 1
    }, time)
}

async function fun1() {
    const a = await log2(5000)
    const b = await log2(10000)
    const c = log2(2000)
    console.log(a)
    console.log(1)
}

fun1()

// 以上运行结果为: 立刻输出undefined   立刻输出1  2秒后输出2000  5秒后输出5000  10秒后输出10000

复制代码

2、那么由此看来async / await的综合用法如下

复制代码

// 1.定义一个或多个普通函数,函数必须返回Promise对象,如果返回其他类型的数据,将按照普通同步程序处理

function log(time) {
    return new Promise((resolve, reject)=> {
        setTimeout(function(){
           console.log(time)
           resolve()
        }, time)
    })
}

async function fun() {
    await log(5000)
    await log(10000)
    log(1000)
    console.log(1)
}

fun()

复制代码

复制代码

// 3. async / await的重要应用 

const asy = function(x, time) {
    return new Promise((resolve, reject) =>{
        setTimeout(()=>{
            resolve(x)
        }, time)
    })
}

const add = async function() {
    const a = await asy(3, 5000)
    console.log(a)
    const b = await asy(4, 10000)
    console.log(b)
    const c =  await asy(5, 15000)
    console.log(a,b,c)
    const d = a + b +c  
    console.log(d)
}

add();

// 5秒后输出3  又10秒后输出4 又15秒后输出5  然后立刻输出3,4,5,然后输出12
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS中的async/await的用法和理解 的相关文章

  • MySQL的分片(一)——分布式数据库概述

    系统分析 OLAP or OLTP 在互联网时代 海量数据的存储与访问成为系统设计与使用的瓶颈问题 对于海量数据处理 按照使用场景 主要分为两种类型 联机事务处理 OLTP 和联机分析处理 OLAP 联机事务处理 OLTP 也称为面向交易的
  • Typora+PicGo+GitHub搭建免费图床

    准备工作 Typora官网 PicGo官网 PicGo Core配置文件 Github 或Gitee Github准备图床仓库 新建一个仓库 仓库一定要设置为public公共仓库 生成私人令牌 Github主页右上角点击用户头像 gt Se

随机推荐

  • 课程2:《黑马程序员_Java基础视频-深入浅出精华版》-视频列表-

    day01 avi 01 01 计算机基础 计算机概述 avi day01 avi 01 02 计算机基础 计算机硬件和软件概述 avi day01 avi 01 03 计算机基础 软件开发和计算机语言概述 avi day01 avi 01
  • 用数学思想演绎的一些系统概念

    在这一部分要给出系统的数学定义 因为公式编辑器有时候不太好用 所以尽量简化 系统的定义 增长 竞争 整体 和 机械化 中心化 最终形态 最终形态的类型 学科中的同构 学科的联合 1 系统的定义 系统的数学定义如下 系统是由元素 元素之间相互
  • ip route 路由命令详解

    523条消息 ip route 命令详解 thj blog的博客 CSDN博客 ip route命令详解 Linux如何查看网关地址 study goup 博客园 cnblogs com 添加路由192 20 30 0 24网段走eth0网
  • python接口自动化测试视频教程百度云全集_python自动化运维测试框架实战视频教程百度云资源...

    python自动化运维测试框架实战视频教程百度云资源 web app 接口自动化 自动化框架 课程目录 开学典礼 上 开学典礼 下 python基础 Python入门 预习视频 python基础 对象与变量 预习视频 python基础 字符
  • Visio里Mathtype公式变形问题解决

    直接从word或者ppt复制MathType公式到Visio里可能会发生公式的变形 查找了一下解决办法 记录一下 建议不要只要从其他office软件直接复制过来 第一步 找到Visio工具栏的插入 然后选择对象 双击插入就可以了 后面的其他
  • QT5背景图片不显示的问题解决方法

    将qt creator左栏的项目 gt 概要 gt shadow build里的勾去除 使生成的debug文件放在源代码目录下 问题就解决了 更多绿色版本软件及机器视觉学习资料 请关注关注公众号 机器视觉智能解决方案
  • 5. 模块化编程

    HI 大家好 我是茶桁 上一节中我们学习了Python基本的流程控制 并且预告了这一节的内容 就是将要学习 模块化编程 那什么是模块化编程呢 按照维基百科的说法 模块化编程 英语 modular programming 是强调将计算机程序的
  • 军品研制过程介绍

    对于新入军品这个行业的新人来说 很难找到一个标准 或者程序等 将整个军品研制过程描述展示出来 本文章将系统性的讲述整个研制过程 一 军品研制过程 军品研制过程分为以下几个过程 可参照GJB 3273 论证阶段 L 技术性能指标可行性论证 方
  • C++访问限定符private、public、protected的使用场景

    众所周知 C 中有3种访问符 分别是private public protected 其中private和public比较好理解 private 只能由该类中的函数 其友元函数访问 不能被任何其他访问 更不能由该类的对象在类外进行访问 类成
  • 软件连接设置_丰田Techstream软件初探(刷一键升窗)

    前面通过我介绍 丰田Mini vci J2534检测线在64位系统安装 不少同学已经购买了J2534数据线 并在64位系统下安装成功了 如安装不成功 可以通过公众号的文字输入栏 发文字给我 我尽量及时解答 今天给大家聊聊如何使用丰田Tech
  • 功能测试基础之界面测试

    功能测试基础之界面测试 文章目录 功能测试基础之界面测试 前言 一 易用性 简述 易用性细则 二 规范性 简述 规范性细则 三 合理性 简述 合理性细则 四 美观与协调性 简述 美观与协调性细则 五 菜单位置 简述 菜单测试细则 六 独特性
  • JSP页面UTF-8格式中文字符串乱码问题解决方法

    JSP页面使用utf8格式保存中文字符串到文件或进行socket传送接收数据时 常常会出现乱码 这里给出了一个解决方法 实践检验行之有效 0 页面属性设置
  • 在linux shell中使用ftp命令来实现自动登陆、上传与下载

    前段时间有个需求 需要利用crontab定时往某个FTP上传文件 原以为linux中带的ftp命令只支持交互式的操作 没法在命令行下使用 所以后来打算利用PHP中提供的ftp命令来做 但是很不幸的发现ftp模块不是PHP的标准模块 还需要自
  • 到底什么是“容器适配器”?

    首先 我们要明白适配器是干什么的 其实就是一个接口转换装置 是得我们能用特定的方法去操作一些我们本来无法操作的东西 举一个例子 比如你的一个设备支持串口线 而你的电脑支持的是usb口 这时候 我们没有必要重新买一个支持usb的设备 只需要一
  • 2020“闭关”跳槽季,啃透分布式三大技术:限流、缓存、通讯

    01 分布式限流 1 1 Nginx ZooKeeper面试常备题 附答案 请解释一下什么是 Nginx 请列举 x Nginx 的一些特性 请列举 x Nginx 和 和 Apache 之间的不同点 请解释 x Nginx 如何处理 P
  • el-input获取输入框光标位置

    今天接到需求 输入框在正常输入的同时 可以通过点击其他按钮在输入框光标位置添加内容 那么这时候就需要去获取输入框的光标内容 由于在点击其他按钮时 输入框会自动触发失焦事件 因此在blur的时候去触发方法即可
  • Linux-安装MySQL(详细教程)

    Linux 安装MySQL 前言 一 概述 二 下载 三 安装 四 卸载 五 常用设置 六 可能遇到的问题 前言 本文的主要内容是在 Linux 上安装 MySQL 以下内容是源于 B站 MySQL数据库入门到精通 整理而来 一 概述 My
  • QVariant的使用

    一 介绍 QT的官方文档这么写的 The QVariant class acts like a union for the most common Qt data types QVariant可以存储各种数据类型 QVariant行为类似于
  • 长整数相乘

    include
  • JS中的async/await的用法和理解

    1 首先需要理解async 和 await的基本含义 async 是一个修饰符 async 定义的函数会默认的返回一个Promise对象resolve的值 因此对async函数可以直接进行then操作 返回的值即为then方法的传入函数 0