async和await的用法

news/2024/7/7 20:12:10

定义

async的定义

在mdn中,async的定义为: async function 关键字可用于定义表达式中的异步函数。

其实很简单,就是async关键字后面定义的函数会被转化为一个异步的函数

如下所示:

        function fn1(){
            return '同步'
        }
        async function asyncFn(){
            return '异步'
        }
        console.log(fn1())
        console.log(asyncFn())
        asyncFn().then(res=>{
            console.log('---',res)
        })

效果:

await的定义

在mdn中,await的定义为: await 操作符用于等待一个 Promise 兑现并获取它兑现之后的值。它只能在异步函数或者模块顶层中使用

其实简单来说:await后面的代码段,是异步去执行完后才获取执行结果

总结:async和await就是promise的一种语法糖,用同步的写法去实现异步的赋值操作

使用语法

await不能单独写,必须在async函数内或者模块顶层

// 写在模块顶层
const colors = fetch("../data/colors.json").then((response) => response.json());

export default await colors;
       //和async函数配套使用
        async function fn(){
            console.log('同步执行的')
           let a = await new Promise(res=>{
                setTimeout(()=>{
                  res('成功了')
                },3000)
            })
            console.log('异步执行的,等a赋值成功之后才回执行')
            console.log(a,'a的值是一个promise')
            return a
        }
        fn().then(res=>{
            console.log(res,'值???')
        })
        setTimeout(()=>{
            console.log('普通的定时器异步')
        },1000)

项目实际应用

这里的request方法是封装后的axios实例

不使用async和await的写法

const query = reactive({
  userName: "",
  name: "",
  role: "",
});
const pageInfo = reactive({
  currentPage: 1,
  pageSize: 10,
});
const total = ref(8);
const tableData = ref([]);
const reqList = () => {
console.log('发送请求函数执行')
  request.post("/app/userRole/userlist", { query, pageInfo }).then((res) => {
    if (res.code === 200) {
      console.log(res,'接口的请求结果')
      tableData.value = res.data.list;
      total.value = res.data.total;
    }
  });
};

使用async和await的写法

//查询列表
const query = reactive({
  userName: "",
  name: "",
  role: "",
});
const pageInfo = reactive({
  currentPage: 1,
  pageSize: 10,
});
const total = ref(8);
const tableData = ref([]);
const reqList = () => {
  request.post("/app/userRole/userlist", { query, pageInfo }).then( async (res) => {
    console.log('发送请求函数执行')
    let resValue = await res
    if(resValue.code === 200){
      console.log('接口请求的结果,async&await写法',resValue)
      tableData.value = resValue.data.list
      total.value = resValue.data.total
    } 
  });
};


http://lihuaxi.xjx100.cn/news/1554917.html

相关文章

苹果笔不用原装可以吗?好用的平板触控笔

由于Apple pencil的出世,给许多小伙伴带了很高的生产效率。但Apple pencil的昂贵,让许多小伙伴连连劝退,觉得只是偶尔写字,没有必要入手一支这么昂贵的笔,咱们国内也会很多做得相当不错的平替电容笔,但很多…

ElementPlus里的类型别名声明及使用

前言 最近刚开始使用ts,定义的变量总是不知道类型,特别是第三方库中,更是不知道有哪些类型,笨人本办法,遇到一个就记录一下,方便我下次使用查询 组件实例 我们通过组件的ref属性获取组件实例时,…

AI绘图提示词Stable Diffusion Prompt 笔记

基础 提示词分为正向提示词(positive prompt)和反向提示词(negative prompt),用来告诉AI哪些需要,哪些不需要词缀的权重默认值都是1,从左到右依次减弱,权重会影响画面生成结果。AI …

APP稳定性测试工具:Monkey

一、Monkey 简介 Monkey 是一款 app 的自动化测试工具,monkey 是猴子的意思,所以从原理上说,它的自动化测试就类似猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱。Monkey 原理也是类似,通过向系统发送…

JVM——8.内存分配方式

这篇文章我们来讲一下jvm的内存分配方式 目录 1.概述 1.1jvm运行时数据区 1.2堆空间的分代 1.3对象分配的整体流程 2.具体的内存分配方式 2.1指针碰撞法 2.2空闲列表法 2.3Java虚拟机选择策略 3.小结 1.概述 我们前面在GC那篇文章中写了JVM的内存分配策略&#xff0…

苹果麻烦了,全球没有消费者愿意接受印度制造的iPhone

据外媒报道指印度制造的iPhone良率只有一半,以至于发出的货被质量工程师打回一半,由此引发欧洲消费者的抗拒,为安抚欧洲消费者,苹果表示欧洲市场的iPhone15将全数由中国制造供应,而印度制造的iPhone将在印度市场销售以…

【Python】自动化办公之路:word自动化实战宝典!

文章目录 前言一、环境安装二、使用步骤1.引入库2.读入数据 Python-docx 编辑已存在文档win32com 将 doc 转为 docxwin32com 操作 word总结 前言 使用Python操作word大部分情况都是写操作,也有少许情况会用到读操作,在本次教程中都会进行讲解&#xff0…

《C和指针》笔记28:可变参数和stdarg宏

可变参数列表可以通过宏来实现,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏——va_start、va_arg和va_end 。我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值…